t-hom’s diary

主にVBAネタを扱っているブログです。

VBAのマクロの実行ボタンもマクロで作ってしまおう

先日のWindowsアップデートで、ActiveXコントロールが使えなくなったらしい。

参照元

Excelのコマンドボタンが、突然動かなくなりました。Windows Update で? - Excel 職人のつぶやき

私の場合はFixItで治ったが、既存のボタンは挿入し直さないといけないとかいう情報も。
ああ面倒くさい。

…ので、マクロでやってみたのが以下サンプル。
これはActiveXではない新しいボタンを使用している。

Sub AddButtons()
    Const WSize As Integer = 80
    Const HSize As Integer = 20

    'スペース区切りで配列に。
    Dim Macros() As String
    Macros = Split("Macro1 Macro2 Macro3 Macro4", " ")
    
    For i = 0 To UBound(Macros)
        Call CreateButton(Macros(i), i * WSize, 0, WSize, HSize)
    Next
End Sub

Private Sub CreateButton(ButtonName, x, y, w, h)
    With ActiveSheet.buttons.Add(x, y, w, h)
        .Name = ButtonName 'オブジェクト名も
        .Caption = ButtonName 'ボタンのテキストも、
        .OnAction = ButtonName 'マクロ名も、面倒なので全部同じにしてしまう。
    End With
End Sub

Sub Macro1()
    MsgBox "test1"
End Sub

Sub Macro2()
    MsgBox "test2"
End Sub

Sub Macro3()
    MsgBox "test3"
End Sub

Sub Macro4()
    MsgBox "test4"
End Sub

いいヒントを頂きました。感謝。

当ブログは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。