VBA粘贴和错误显示msgbox

时间:2014-03-28 12:26:56

标签: excel vba error-handling

我很抱歉,因为这里有很多次讨论。我有以下问题。此宏应从剪贴板粘贴到单元格(1,1)。如果剪贴板中没有数据,我希望它显示带有测试“无需粘贴”的msgbox。

这一点是错误的,它将输入单元格(1,1)文本:“MsgBox”无需粘贴“”而不是显示消息。

你可以帮我纠正错误吗?非常感谢提前!!!

Sub Paste()

Cells(1, 1).PasteSpecial

If Err Then
MsgBox "Nothing to paste"
End If

End Sub

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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 to .PasteSpecial