目次
目的
- ワークシートにボタンを挿入する。
- ボタンにマクロを登録する。
下記の方法でボタンを作成してみたものの、ボタンを押した時のアニメーションというか、ボタンを押してもボタンがへこまない状態になってしまいました。ボタンに登録したマクロは実行されましたが、原因がわからないままです。
その一例
- 白紙のワークシートでテストしてみます。
- ボタンに登録するマクロを作成しておきます。
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- 「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 - 「a.Caption」
ボタン表示名。 - 「a.OnAction」
マクロ登録。 - 実行結果は以下のようになりました。
- 「Set a = ActiveSheet.Buttons.Add(54, 13.5, 108, 40.5)」
- 上記で作成したボタンをクリックしてみます。
- ボタンが削除されました。
- ボタンが削除されました。
OnAction で引数を渡す
- 白紙のワークシートでテストしてみます。
- 引数を受け取るマクロを作成しておきます。
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,""A"",true'"」
- マクロ名、スペースの後に引数を列挙しています。""A"" は文字列なのでダブルクォーテーションで囲んでいます。
- 上記 1 をシングルクォーテーション「'」で囲んいます。
- 上記 2 をダブルクォーテーション「"」で囲んでいます。
- 実行結果は以下のようになりました。
- 作成されたボタンを右クリックして「マクロの登録」をクリックしてみます。
- 引数を受け取るマクロが登録されているようです。
- 「"'引数を受け取るマクロ 1,""A"",true'"」
- ボタンをクリックしてみます。
- 実行結果は以下のようになりました。なぜか 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
以上、閲覧ありがとうございました。