Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA粘贴和错误显示msgbox_Excel_Vba_Error Handling - Fatal编程技术网

Excel VBA粘贴和错误显示msgbox

Excel VBA粘贴和错误显示msgbox,excel,vba,error-handling,Excel,Vba,Error Handling,我很抱歉,因为这里可能已经讨论过很多次了。我有以下问题。此宏应该从剪贴板粘贴到单元格(1,1)。如果剪贴板中没有数据,我希望它显示msgbox,并测试“无需粘贴” 此操作将在单元格(1,1)文本中输入错误:“MsgBox”Nothing to paste”(无需粘贴),而不是显示消息 你能帮我改正错误吗?非常感谢 Sub Paste() Cells(1, 1).PasteSpecial If Err Then MsgBox "Nothing to paste" End If End Sub

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

此操作将在单元格(1,1)文本中输入错误:“MsgBox”Nothing to paste”(无需粘贴),而不是显示消息

你能帮我改正错误吗?非常感谢

Sub Paste()

Cells(1, 1).PasteSpecial

If Err Then
MsgBox "Nothing to paste"
End If

End Sub

粘贴文本后,请尝试清除剪贴板,以便下次运行时不会包含刚刚粘贴的文本

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

现在它工作得很好,我已经更改了。粘贴到.PasteSpecial

它将在单元格(1,1)中输入文本:“MsgBox“无需粘贴”而不是显示消息。
-这是因为您上次的操作是复制这一行代码并将其粘贴到子单元格中。而这一行仍在剪贴板中抱歉,我尝试查找Microsoft Forms 2.0对象库,但它不在我的电脑上。我还尝试在电脑上搜索FM20.DLL文件,但没有结果-这可能是因为我使用的是WYSE终端。有其他方法可以做到这一点吗?第一个只显示错误信息,不粘贴任何内容。我在那里尝试了第二位代码,并简单地将
activesheet.cells(1,1)
替换为
selection
,但结果不理想,整个剪贴板被粘贴到selection中的每个单元格中。。我想,要想实现自动粘贴对数据表的作用,需要花费相当长的时间。无论哪种方式,都可以获得信息~!(学习新方法总是很受欢迎的!)Hi@Reverus-在格式方面有点限制。如果您只有一列但有多行需要拆分成行,请尝试John。但是,它不处理多个列,并且假定分隔行的是
vbCr
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