マクロでマクロボタンを2個作る
マクロ実行用のボタンが複数必要な場合もあります。ボタンをまとめて作るためのマクロを紹介します。
マクロボタンを横2つとか縦2つなど並べてみる
マクロでマクロボタンを2個作る
今度は、マクロのボタンを2個、横に並べて作りたいと思います。
もちろん、前回のコードを2回繰り返してもいいのですが、コードには、いろいろな書き方があるので、紹介しようと思います。
Excelバージョン:
(サンプルファイルは、こちらから 2010マクロ講座27回サンプルデータ)
マクロ実行ボタンを2個作る
2010 マクロ講座26回のコードを2回繰り返しています。セルの指定方法を変えています。
セル1とセル2をオブジェクト変数として宣言しています。 そうすることで、オブジェクトのさまざまな要素を利用することができます。
セル1とセル2をオブジェクト変数として宣言しています。 そうすることで、オブジェクトのさまざまな要素を利用することができます。
Sub ボタン作成2個横() Dim セル1, セル2 Set セル1 = ActiveSheet.Cells(2, 2) Set セル2 = ActiveSheet.Cells(2, 4) With ActiveSheet.Buttons.Add(セル1.Left, セル1.Top, セル1.Width, セル1.Height) .Name = "ボタンB2" .OnAction = "ボタン1" .Characters.Text = "ボタン1" End With With ActiveSheet.Buttons.Add(セル2.Left, セル2.Top, セル2.Width, セル2.Height) .Name = "ボタンC2" .OnAction = "ボタン2" .Characters.Text = "ボタン2" End With End Sub
実行すると、ボタンが2個作成されます。
作成するボタンの位置を変更する時は、Cells(2, 2)の部分で変更できます。
またRange("B2")のような指定方法でも同じです。
ボタンの位置を数値で指定
ボタンをセル上に、ピッタリ作成するのではなく、数値で指定する時は次の様に指定します。
Sub ボタンの位置とサイズ() With ActiveSheet.Buttons.Add(100, 10, 80, 20) .Name = "ボタン前" .Caption = "ボタン前" .OnAction = "ボタン前" End With With ActiveSheet.Buttons.Add(200, 10, 80, 20) .Name = "ボタン後" .Caption = "ボタン後" .OnAction = "ボタン後" End With End Sub実行すると、このようにボタンが作成されます。
ボタンの位置を知らせる
作成したボタンに登録するマクロとして、ボタン前とボタン後という名前のマクロを作成して実行してみます。
ボタンの位置を知らせるには、Application.Callerプロパティを使います。Application.Callerプロパティは、Visual Basic を呼び出した方法についての情報を返します。
以下のボタン前マクロでは、左上のセルアドレスを返します。またボタン後マクロでは、セルの位置をサイズを数値で返します。
ボタンの位置を知らせるには、Application.Callerプロパティを使います。Application.Callerプロパティは、Visual Basic を呼び出した方法についての情報を返します。
以下のボタン前マクロでは、左上のセルアドレスを返します。またボタン後マクロでは、セルの位置をサイズを数値で返します。
Sub ボタン前() MsgBox ActiveSheet.Shapes(Application.Caller).TopLeftCell.Address End Sub
Sub ボタン後() MsgBox ActiveSheet.Shapes(Application.Caller).Top MsgBox ActiveSheet.Shapes(Application.Caller).Left MsgBox ActiveSheet.Shapes(Application.Caller).Width MsgBox ActiveSheet.Shapes(Application.Caller).Height End Sub
ボタン前をクリックすると、TopLeftCell.Addressが返されます。
ボタン後をクリックすると、Top、Left、Width、Heightが順に返されます。
ボタンを縦に2つ作るマクロ
ボタンを縦に2つ作るマクロは、横につくるマクロのコードのCells(2, 2)の部分を少し変更するだけです。
Set セル1 = ActiveSheet.Range("C2") Set セル2 = ActiveSheet.Range("C4")実行すると縦に2つのボタンが作成されます。