エラーが発生していないときに Resume を実行することはできません。(エラー番号:20)


まずは、Resumeステートメントの正しい使い方から。

Sub Sample1()
    On Error GoTo Error1
    ActiveWorkbook.SaveAs "C:\Work\Sample.xlsx"
    MsgBox "処理が完了しました"
    Exit Sub
Error1:
    MsgBox "保存されませんでした"
    Err.Clear
    Resume Next
End Sub

アクティブブックに名前を付けて保存するマクロです。SaveAsメソッドの前に「On Error Goto Error1」を実行して、"もしエラーが発生したら、ラベルError1にジャンプする"ようにします。SaveAsメソッドでC:\Work\Sample.xlsxに保存するのですが、もし同じフォルダに同名のファイルが存在すると、次の確認が表示されます。

ここで[いいえ]ボタンか[キャンセル]ボタンをクリックすると、ブックは保存されません。保存されないということは、SaveAsメソッドによる"保存する"という行為が正常に終了されなかったことになり、SaveAsメソッドはエラーを発生させます。処理はラベルError1にジャンプしますので「保存されませんでした」というMsgBoxが表示されます。続いて実行される「Resume Next」はエラーが発生した行の次に戻れという意味なので、SaveAsメソッドの次行である「MsgBox "処理が完了しました"」が実行されます。

とまぁ、これがResumeステートメントの使い方です。このように、Resumeステートメントはエラー処理の中で使われなければなりません。それを

Sub Sample2()
    ActiveWorkbook.SaveAs "C:\Work\Sample.xlsx"
    MsgBox "処理が完了しました"
    Resume Next
End Sub

のように、エラー処理と関係のない使い方をしたとき、このエラーが発生します。

解決方法は…エラー処理の中で使ってください、つーことですね。