ワークシートにボタンを挿入して、そのボタンにマクロを登録するマクロ。

執筆者:

カテゴリ:

目的

  • ワークシートにボタンを挿入する。
  • ボタンにマクロを登録する。

下記の方法でボタンを作成してみたものの、ボタンを押した時のアニメーションというか、ボタンを押してもボタンがへこまない状態になってしまいました。ボタンに登録したマクロは実行されましたが、原因がわからないままです。

その一例

  1. 白紙のワークシートでテストしてみます。
白紙のワークシート。
白紙のワークシート。
  • ボタンに登録するマクロを作成しておきます。
    Sub 全オートシェイプ削除()
    ActiveSheet.Shapes.SelectAll
    Selection.Delete
    End Sub
  • ボタン作成、表示名設定、マクロ登録を行ってみます。
    Sub ボタン作成_表示名設定_マクロ登録()
    Dim a
    Set a = ActiveSheet.Buttons.Add(54, 13.5, 108, 40.5)
    a.Caption = "「全オートシェイプ削除」を実行するボタン"
    a.OnAction = "全オートシェイプ削除"
    End Sub
    1. 「Set a = ActiveSheet.Buttons.Add(54, 13.5, 108, 40.5)」
      左,上,幅,高さをポイント単位で指定
  • ボタンの位置。
    ボタンの位置。

    セルの位置は以下のようなマクロで取得出来ると思います。

    Sub B2C4のLeft_Top_Width_Height取得()
    With Range("B2:C4")
    Debug.Print .Left
    Debug.Print .Top
    Debug.Print .Width
    Debug.Print .Height
    End With
    End Sub
    54 , 13.5 , 108 , 40.5
    54 , 13.5 , 108 , 40.5
  • 「a.Caption」
    ボタン表示名。
  • 「a.OnAction」
    マクロ登録。
  • 実行結果は以下のようになりました。
  • ボタンが作成されている。
    ボタンが作成されている。
  • 上記で作成したボタンをクリックしてみます。
  • マウスでクリック。
    マウスでクリック。
    1. ボタンが削除されました。
    削除されている。
    削除されている。

    OnAction で引数を渡す

    1. 白紙のワークシートでテストしてみます。
    白紙のワークシート。
    白紙のワークシート。
  • 引数を受け取るマクロを作成しておきます。
    Sub 引数を受け取るマクロ(引数1, 引数2, 引数3)
    Debug.Print 引数1; Spc(1); TypeName(引数1)
    Debug.Print 引数2; Spc(1); TypeName(引数2)
    Debug.Print 引数3; Spc(1); TypeName(引数3)
    End Sub
  • 引数を渡すボタンを作成してみます。
    Sub 引数を渡すボタン作成()
    Dim a
    Set a = ActiveSheet.Buttons.Add(54, 13.5, 108, 40.5)
    a.Caption = "「引数を受け取るマクロ」を実行するボタン"
    a.OnAction = "'引数を受け取るマクロ 1,""A"",true'"
    End Sub
    1. 「”‘引数を受け取るマクロ 1,””A””,true’”」
      1. マクロ名、スペースの後に引数を列挙しています。””A”” は文字列なのでダブルクォーテーションで囲んでいます。
      2. 上記 1 をシングルクォーテーション「’」で囲んいます。
      3. 上記 2 をダブルクォーテーション「”」で囲んでいます。
    2. 実行結果は以下のようになりました。
  • 作成されたボタン。
    作成されたボタン。
  • 作成されたボタンを右クリックして「マクロの登録」をクリックしてみます。
  • (1)右クリック
(2)マクロの登録をクリック
    (1)右クリック
    (2)マクロの登録をクリック
  • 引数を受け取るマクロが登録されているようです。
  • (1)登録されているマクロ
(2)キャンセルをクリック
    (1)登録されているマクロ
    (2)キャンセルをクリック
    マクロ名を拡大。
    マクロ名を拡大。
  • ボタンをクリックしてみます。
  • クリック。
    クリック。
    1. 実行結果は以下のようになりました。なぜか 1 の前にスペースが出力されてしまいますが、とりあえず引数を受け取る事が出来ました。
    1 の前にスペースが出力されている。
    1 の前にスペースが出力されている。

    マクロストック

    Private Sub OnActionに登録するマクロ()
    MsgBox "「OnActionに登録するマクロ」を実行しました。"
    End Sub

    Sub 別の方法でボタン作成()
    Dim a
    Set a = Sheet1.Shapes.AddFormControl(xlButtonControl, 54, 13.5, 108, 40.5)
    a.DrawingObject.Caption = "OnActionに登録するマクロ"
    a.OnAction = "OnActionに登録するマクロ"
    End Sub
    ボタンが作成されました。
    ボタンが作成されました。
    マクロが実行されました。
    マクロが実行されました。

    テスト環境

    • Windows 10(64 ビット)
    • Microsoft Office Excel 2003

    以上、閲覧ありがとうございました。