2012-01-26 96 views
11

我使用這樣的代碼從剪貼板中獲取文本。使用GetText從剪貼板獲取文本 - 避免空剪貼板上的錯誤

Dim DataObj As New MSForms.DataObject 
DataObj.GetFromClipboard 
myString = DataObj.GetText 

我使用錯誤處理得到了過去在剪貼板是空的情況下,和一切都很好,只要我保持錯誤陷阱集玩轉處理錯誤。

但是,由於不相關的原因,我想將錯誤陷印設置爲在所有錯誤上中斷,並且當它找到空剪貼板時在DataObj.GetText處發生錯誤。是否有任何一種測試可以在上游進一步應用,以避免嘗試處理空的剪貼板?

回答

14

這有幫助嗎?

Sub GetClipBoardText() 
    Dim DataObj As MSForms.DataObject 
    Set DataObj = New MsForms.DataObject '<~~ Amended as per jp's suggestion 

    On Error GoTo Whoa 

    '~~> Get data from the clipboard. 
    DataObj.GetFromClipboard 

    '~~> Get clipboard contents 
    myString = DataObj.GetText(1) 
    MsgBox myString 

    Exit Sub 
Whoa: 
    If Err <> 0 Then MsgBox "Data on clipboard is not text or is empty" 
End Sub 

你會注意到它也會處理一個空的剪貼板。

您可以在使用下面的代碼測試上述代碼之前清空剪貼板。請將其粘貼到模塊中。

Private Declare Function OpenClipboard Lib "User32.dll" _ 
(ByVal hWndNewOwner As Long) As Long 

Private Declare Function EmptyClipboard Lib "User32.dll"() As Long 

Private Declare Function CloseClipboard Lib "User32.dll"() As Long 

Public Sub ClearClipboard() 
    Dim Ret 

    Ret = OpenClipboard(0&) 
    If Ret <> 0 Then Ret = EmptyClipboard 
    CloseClipboard 
End Sub 

編輯:由OP

Private Declare Function CountClipboardFormats Lib "user32"() As Long 

Sub Sample() 
    If (CountClipboardFormats() = 0) = True Then 
     MsgBox "Clipboard is empty" 
    Else 
     MsgBox "Clipboard is not empty" 
    End If 
End Sub 
+1

我會使用Dim DataObj As MSForms.DataObject和Set DataObj = MsForms.DataObject(單獨的行)來避免自動實例化變量。另外,一個函數最適合抓取剪貼板文本並將其返回。 – JimmyPena

+0

很想看到一個示例:)事實上,會建議你在一篇新文章中發佈整個代碼。它不僅會幫助OP,還會幫助尋求解決方案的其他人:) –

+0

啊,我只是編輯了你的答案,而不是:D – JimmyPena

0

添加follwoing代碼只是B4爲調試運行斷裂線的新要求....我disapeared的錯誤測試..奇怪,但之後它在某種程度上工作(Excel 2010中)

的myString = DataObj.GetText(1) MSGBOX的myString

3

希望這可以幫助其他人:

我正上發表 亞洲時報Siddharth,擊潰

的代碼錯誤「沒有定義的用戶定義類型」原來,「Microsoft窗體2.0對象庫」,是缺少/未激活。

得到它與該作品(http://excel-macro.tutorialhorizon.com/vba-excel-reference-libraries-in-excel-workbook/):

「有時你會不會在列表中找到所需的引用,說你不會找到‘Microsoft窗體在工具/引用2.0對象庫’在這種情況下,你需要瀏覽FM20.DLL文件從系統32「