目次

目的

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

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

目次まで戻る

その一例

  1. 白紙のワークシートでテストしてみます。
    白紙のワークシート。
    白紙のワークシート。
  2. ボタンに登録するマクロを作成しておきます。
    Sub 全オートシェイプ削除()
    ActiveSheet.Shapes.SelectAll
    Selection.Delete
    End Sub
  3. ボタン作成、表示名設定、マクロ登録を行ってみます。
    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
    2. 「a.Caption」
      ボタン表示名。
    3. 「a.OnAction」
      マクロ登録。
    4. 実行結果は以下のようになりました。
      ボタンが作成されている。
      ボタンが作成されている。
  4. 上記で作成したボタンをクリックしてみます。
    マウスでクリック。
    マウスでクリック。
    1. ボタンが削除されました。
      削除されている。
      削除されている。

目次まで戻る

OnAction で引数を渡す

  1. 白紙のワークシートでテストしてみます。
    白紙のワークシート。
    白紙のワークシート。
  2. 引数を受け取るマクロを作成しておきます。
    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
  3. 引数を渡すボタンを作成してみます。
    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. 実行結果は以下のようになりました。
      作成されたボタン。
      作成されたボタン。
    3. 作成されたボタンを右クリックして「マクロの登録」をクリックしてみます。
      (1)右クリック
(2)マクロの登録をクリック
      (1)右クリック
      (2)マクロの登録をクリック
    4. 引数を受け取るマクロが登録されているようです。
      (1)登録されているマクロ
(2)キャンセルをクリック
      (1)登録されているマクロ
      (2)キャンセルをクリック
      マクロ名を拡大。
      マクロ名を拡大。
  4. ボタンをクリックしてみます。
    クリック。
    クリック。
    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

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

目次まで戻る

同じカテゴリの投稿(Excel VBA)

前後の投稿