我想通过在以下情况下添加 MsgBox 来改进整个代码:
运行时错误“1004”:Range 类的 PasteSpecial 方法失败。
如果剪贴板为空并且我运行宏,则会导致此错误。任何建议?
Sub Test()
On Err.Number = 1004 GoTo ErrMsg
Dim Val As Variant
Sheets("Sheet 3").Select
Val = Range("A2").Value
Sheets("Sheet 1").Select
Call TextFromClipboard
Range("AY" & Val).Select
ActiveSheet.Paste
Sheets("Sheet 3").Select
ErrMsg:
MsgBox "Nothing to paste!", vbCritical, "Clipboard is empty!"
End Sub
Run Code Online (Sandbox Code Playgroud)
我总是发现如果可以捕获错误,最好真正捕获它,而不是依赖 GoTo。
根据此答案,您可以创建一个函数来查看剪贴板是否为空。
Function clipboardEmpty() as Boolean
'requires reference to Microsoft Forms 2.0 Object Library
Dim myDataObject As DataObject
Set myDataObject = New DataObject
myDataObject.GetFromClipboard
clipboardEmpty = Not myDataObject.GetFormat(1) = True
End Sub
Run Code Online (Sandbox Code Playgroud)
然后,您可以将程序更新为:
If clipboardEmpty Then
Msgbox "No Data to Paste!"
Else
'Do Stuff
End If
Run Code Online (Sandbox Code Playgroud)