我在快速从剪贴板读取数据时遇到问题。我有一个程序每秒向剪贴板发送10次数据,现在在VBA中我希望重新获取该数据。
代码使用:
Dim clipboard As MSForms.DataObject
Dim strContents As String
Set clipboard = New MSForms.DataObject
Do While True
clipboard.GetFromClipboard
strContents = clipboard.GetText
clipboard.Clear
Myfunc(strContents)
ThisApplication.StatusBarText = strContents 'debug
If Left(strContents, 1) = 9 Then Exit Sub 'end condition
Set clipboad = Nothing
sleep 100
Loop
End Sub
有问题:此代码工作约2秒后出现错误: DataObject:GetText 8007000E - 内存不足。 剪贴板数据也是不停的。我每个循环清除对象。哪里有问题?我在64位Windows 7,64位VBA应用程序,8演出的RAM。
答案 0 :(得分:3)
帕特里克指出,你应该将Set clipboard = Nothing
移到循环下方。此外,还有一个拼写错误,因为它目前写为set clipboad = Nothing
。
此外,清除剪贴板后插入DoEvents
。这将确保操作系统在您再次阅读之前有时间清除它。
你的最终代码看起来应该是这样的:
Dim clipboard As MSForms.DataObject
Dim strContents As String
Set clipboard = New MSForms.DataObject
Do While True
clipboard.GetFromClipboard
strContents = clipboard.GetText
clipboard.Clear
DoEvents
Myfunc(strContents)
ThisApplication.StatusBarText = strContents 'debug
If Left(strContents, 1) = 9 Then Exit Sub 'end condition
sleep 100
Loop
Set clipboard = Nothing