別ブックのマクロを実行したときの結果

先日Excelで、別ブックにあるマクロを実行したときの出来事。
f:id:Infoment:20200404222936p:plain

その時の状況は、以下のとおり。

  • Book1のHOGEから、Book2のFUGAを実行
  • FUGAがエラー終了
Sub HOGE()
    Application.Run "BOOK2!FUGA"
End Sub
Sub FUGA()
    Range("A1") = "ふが"
End Sub

HOGE側はFUGAが上手く行かなかった場合も、それなりに処理を継続したい。

そこで今回は、FUGA側をFUNCTIONプロシージャに変更して対応してみた。

Function FUGA() As Boolean
    ' エラー無視。
    On Error Resume Next
    Range("A1") = "ふが"
    
    ' エラーの発生状況から、処理の成否を判断。
    Select Case Err.Number
        ' エラーが発生していない場合。
        Case 0: FUGA = True
        ' それ以外の(つまりエラーが発生している)場合。
        Case Else: FUGA = False
    End Select
    
    ' エラー無視解除。
    On Error GoTo 0
End Function

HOGE側は戻り値から、FUGAの成否を判断して次の処理に繋げる。

Sub HOGE()
    Select Case Application.Run("BOOK2!FUGA")
        Case True
            MsgBox "処理成功"
        Case Else
            MsgBox "処理失敗"
    End Select
End Sub

f:id:Infoment:20200404224143p:plain

結構便利なテクニックで、毎度重宝してます。

参考まで。