我需要 Microsoft Word 365 (Windows 10) 中 GetFromClipboard 的替代方案
我的代码使用 GetFromClipboard 如下所示:
Public var1
Dim MyData As DataObject
Set MyData = New DataObject
Dim var1 As String
‘ extra code that locates text and selects it’
Selection.Copy
MyData.GetFromClipboard
var1 = MyData.GetText(1)
我能够读取 var1 并根据存储在那里的内容执行嵌套宏,我还可以粘贴内容或使用 TypeText 将内容插入到文档中。
这个方法行之有效了好几年。现在,我的一些客户端用户收到一致的错误消息:DataObject:GetFromClipboard OpenClipboard 失败。
一开始,它并没有停在这行代码的第一个实例上。它可能会读取代码出现的前 25 次,但会在第 26 次停止。有一段时间,用户可以重新启动宏,代码行将起作用,整个过程将运行。然后需要进行2-3次尝试。每次出现错误消息时,它都会停在 GetFromClipboard 行的不同实例上。现在宏拒绝传递第一个 GetFromClipboard 行,并且总是抛出相同的错误消息。
奇怪的是,公司中的一个系统可以运行这些宏并且不会给出错误。办公室里的每个人都必须坐在这一台计算机前来运行这些宏。它使用相同的Normal.dotm,具有相同的操作系统。
我已经进行了几天的在线研究,但找不到任何知道如何解决此问题的人。我尝试了几行类似的代码。例如,我已经知道 PutInClipboard 不起作用。
我真正需要的是一种替代方案,其关键特征是存储的变量必须在嵌套宏或调用宏中可用。只要该宏正在运行,我尝试过的大多数选项都会存储变量的内容。它不会在嵌套或调用的宏中记住它。
Corel WordPerfect(请不要窃笑)有一个 PersistAll!命令就成功了并且每次都有效。我发现一个帖子说使用静态(有一个清晰的例子),我尝试过,除非我编码错误,否则它不起作用。
我还没有找到任何人的代码可以让我复制文本、将文本存储在变量中,并在主宏调用的其他宏中访问该变量的内容。有人可以帮忙吗???
我需要一些可以在 Microsoft Word 中使用的东西,而不是 Excel。
路易·塔克
我尝试过 Static、PutInClipboard 以及其他几个在 Excel 中有效的选项,但在 Word 中无效。我已经为此花了好几天的时间,但我已经忘记了我尝试过的一切。
剪贴板不是一个可靠的解决方案。用户的操作或其他软件可能会破坏剪贴板中的内容。
我建议将该值存储在 Windows 注册表中而不是剪贴板中。优点是重启后仍然可以访问。
Option Explicit
Sub WriteRegistry()
Dim KeyName As String
Dim StrValue As String
Const APP_NAME = "MyApp" ' modify as needed
Const SECTION = "Word"
KeyName = "WordVar"
StrValue = "**This is a test string.**"
SaveSetting APP_NAME, SECTION, KeyName, StrValue
MsgBox "Text successfully stored in the registry.", vbInformation
End Sub
Sub ReadRegistry()
Dim KeyName As String
Dim StrValue As String
Const APP_NAME = "MyApp"
Const SECTION = "Word"
KeyName = "WordVar"
StrValue = GetSetting(APP_NAME, SECTION, KeyName)
MsgBox "Retrieved Text: " & StrValue, vbInformation
End Sub
Sub RemoveRegistry()
Const APP_NAME = "MyApp"
Const SECTION = "Word"
DeleteSetting APP_NAME, SECTION
MsgBox "Remove it from the registry.", vbInformation
End Sub
微软文档: