我对快速读取剪贴板上的数据有问题。我有一个程序,它以每秒10次的速度将数据发送到剪贴板,现在在VBA中,我想要增强这些数据。
代码im使用:
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千兆内存。
发布于 2014-05-08 08:43:41
正如Patrick所指出的,您应该将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
https://stackoverflow.com/questions/23529063
复制相似问题