2014-05-07 65 views
3

我有快速從閱讀剪貼板數據的問題。我有一個程序每秒將數據發送10次到剪貼板,現在在VBA中,我想要收回數據。使用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秒,然後我得到錯誤: 數據對象:的getText 8007000E - 內存耗盡。 剪貼板數據不會停止。 Im每個循環清理對象。問題在哪裏?我在64位Windows 7,64位VBA應用程序,8演唱會內存。

+2

第一個錯誤我發現:'設置clipboad = Nothing',這應該是下面的'Loop'。 「Myfunc(strContents)」的代碼在哪裏?不知道在這裏爲「睡眠100」計時,你應該「睡得少」,並檢查新的剪貼板內容是否與以前相同。 – PatricK

回答

3

正如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 
+0

我欠你一杯啤酒。此代碼工作完美無瑕。 – Kotey