あらきけいすけのメモ帳

あらきけいすけの雑記帳2

Excel VBA でマクロの引数にマクロ名を渡す、あるいは実行しているマクロ名を表示させたい

自分用の覚書。Application.Run(マクロ名〔,引数1〔,引数2〔,...〕〕〕) を使うと、呼び出すマクロ名を文字列で扱うことができ、呼び出すマクロの切り替えを呼出側で変数の値として切り替えできる。fortran や C より簡単(fortran でサブルーチンの引数にサブルーチンを渡す - あらきけいすけの雑記帳

Option Explicit

Sub test000()
    Dim s As String, v As Variant, v0 As Variant
    s = "マクロ1" ' 呼び出すマクロの名前
    v = 10
    v0 = Application.Run(s, v)
    MsgBox "test000 calls " & s & "(" & v & ")->" & v0
End Sub

Function マクロ0(v As Variant) As Variant
    MsgBox "マクロ0(" & v & ")"
    マクロ0 = v
    If IsNumeric(v) Then: マクロ0 = v + 1
End Function

Function マクロ1(v As Variant) As Variant
    MsgBox "マクロ1(" & v & ")"
    マクロ1 = v
    If IsNumeric(v) Then: マクロ1 = v - 1
End Function