Как добавить окно сообщения в случае ошибки 1004 - PullRequest
2 голосов
/ 04 марта 2020

Я хочу улучшить весь код, добавив MsgBox в случае:

Ошибка времени выполнения '1004': сбой метода PasteSpecial класса Range.

Эта ошибка возникает, если буфер обмена пусто и я запускаю макрос. Любой совет?

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

Orgin

Ответы [ 2 ]

7 голосов
/ 04 марта 2020

Мне всегда лучше по-настоящему перехватить ошибку, если она может быть перехвачена, чем полагаться на 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

Затем вы можете обновить свою процедуру следующим образом:

If clipboardEmpty Then
    Msgbox "No Data to Paste!"
Else
   'Do Stuff
End If
2 голосов
/ 04 марта 2020

Используйте регистр выбора в обработчике ошибок, чтобы обработать номер ошибки, отсутствующий в операторе goto.

Вы, вероятно, могли бы убрать необходимость все вместе для этой конкретной ошибки, удалив выборки и не используя буфер обмена.

Sub Test()
    On Error 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
Exit Sub
ErrMsg:
    Select Case Err.Number
    Case 1004
        MsgBox "Nothing to paste!", vbCritical, "Clipboard is empty!"
    End Select
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...