2014-03-28 61 views
0

我很抱歉,因爲這可能在這裏很多時候討論過。我有以下問題。這個宏應該從剪貼板粘貼到單元格(1,1)。如果剪貼板中沒有數據,我希望它顯示msgbox測試「沒有粘貼」。VBA粘貼和錯誤顯示msgbox

這樣做是錯誤的,它會進入單元格(1,1)文本:「MsgBox」沒有粘貼「」而不是顯示消息。

你能幫我糾正錯誤嗎?提前謝謝了!!!

Sub Paste() 

Cells(1, 1).PasteSpecial 

If Err Then 
MsgBox "Nothing to paste" 
End If 

End Sub 
+0

'它會在單元格中輸入(1,1)文字: 「MSGBOX 」沒有粘貼「」,而不是顯示消息。「 - 這是因爲你最後的行動是複製這行代碼並將其粘貼到你的子版本中。而這行仍然在剪貼板 –

回答

0

嘗試在粘貼文本後清除剪貼板,以便下一次運行不會包含剛剛粘貼的文本。

Sub Paste() 
    On Error Resume Next 
    Cells(1, 1).PasteSpecial 

    'Clear clipboard 
    Application.CutCopyMode = False 

    If Err Then 
     MsgBox "Nothing to paste!" 
     Err.Clear 
    End If 
End Sub 

這裏是使用MS更直接剪貼板另一種方式。首先,您需要在您的vba項目中添加對以下項的引用:Microsoft Forms 2.0對象庫

Public Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long 
Public Declare Function EmptyClipboard Lib "user32"() As Long 
Public Declare Function CloseClipboard Lib "user32"() As Long 

Sub Paste() 
    Dim DataObj As New MSForms.DataObject 
    DataObj.GetFromClipboard 

    On Error GoTo ErrorHandler 
     ActiveSheet.Cells(1, 1).Value = DataObj.GetText 

     OpenClipboard (0&) 
     EmptyClipboard 
     CloseClipboard 
     Exit Sub 

ErrorHandler: 
    MsgBox "Nothing to paste!" 
End Sub 
+0

對不起,我試圖找到Microsoft Forms 2.0對象庫,它不在我的電腦上。此外,我試圖搜索我的電腦FM20.DLL文件,並沒有結果 - 這可能是因爲我使用的是WYSE終端。 – Petrik

+0

有沒有其他方法如何做到這一點?第一個只是只顯示錯誤消息,不要粘貼任何東西 – Petrik

+0

我試着在那裏的第二位代碼,並簡單地用'selection'替換'activesheet.cells(1,1)',但結果是不可取的,整個剪貼板被粘貼到選擇中的每個單元格中。我想它會被抽出來試圖完成自動粘貼對數據表格執行的操作。無論哪種方式,信息〜! (學習新方法總是感激!) – Reverus

0
Sub Paste() 
    On Error Resume Next 
    Cells(1, 1).PasteSpecial 

    'Clear clipboard 
    Application.CutCopyMode = False 

    If Err Then 
     MsgBox "Nothing to paste!" 
     Err.clear 
    End If 
End Sub 

現在是可以正常使用的,我已經改變了.Paste到.PasteSpecial