VBA剪贴板快速阅读

时间:2014-05-07 21:45:42

标签: performance vba clipboard

我在快速从剪贴板读取数据时遇到问题。我有一个程序每秒向剪贴板发送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。

1 个答案:

答案 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