マクロでActiveXコントロールボタン作成

ActiveXコントロールボタンをマクロで作る

ActiveXコントロールボタン作成

今回は、ActiveXコントロールボタンをマクロで作成してみましょう。
どんなコードを書いていいのかよくわかならない時は、記録してみるという方法があります。 そして、その記録から得られたコードに変更を加えます。
Excelバージョン:201320102007
(サンプルファイルは、こちらから 2010マクロ講座29回サンプルデータ

記録できないコマンドボタンのプロパティ

マクロの記録でActiveXコントロールボタンを作成してみましょう。
ActiveXコントロールボタンマクロ1
CommandButton1が作成されたら、記録を終了します。
ActiveXコントロールボタンマクロ2
出来たコードを見てみると、以下のようなコードになりました。
ActiveXコントロールボタンマクロ3
次にもう一度、ボタンに色をつけたり名前やキャプションを変えたらどうなるのかとマクロの記録を 繰り返しても、プロパティで変更した部分のマクロの記録は記載さず、最初の記録と同じようなコードでした。 コマンドボタンのプロパティに関しては、マクロの記録では記録できないのです。
Sub Macro2()
    ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False _
        , DisplayAsIcon:=False, Left:=153.75, Top:=78, Width:=132, Height:= _
        37.5).Select
End Sub

CommandButtonコードに修正を加える

数値の代わりにセルの位置で指定したいので、マクロの記録のコードを次のように書き換えました。
Sub 記録マクロから変更()
Dim セル1 As Object
Set セル1 = ActiveSheet.Range("B5:C5")
    With ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", _
             Link:=False, DisplayAsIcon:=False, _
             Left:=セル1.Left, Top:=セル1.Top, Width:=セル1.Width, Height:=セル1.Height * 2)
            .Name = "MyA"
            .Object.BackColor = &HFFFFC0
            .Object.Caption = "MyA"
    End With
End Sub
.Name = "MyA"でボタンの名前を指定し、
.Object.BackColor = &HFFFFC0で、ボタンの色を変更し、
.Object.Caption = "MyA"でボタンの表示名を変更しています。
変更したコードを実行すると、以下のようにRange("B5:C5")の位置情報を利用してボタンが作成されます。
ActiveXコントロールボタンマクロ4
次のコードでは、シート上のアクティブセルを利用してボタンを作成します。 あらかじめ、どこかのセルを選択しておきます。
Sub 記録マクロから変更2()
    With ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False, DisplayAsIcon:=False)
        .Object.Caption = "ボタン1"
        .Object.Font.Name = "小塚ゴシック Pr6N" 'フォントの種類を変更
        .Object.Font.Size = 11     
        .Object.BackColor = &HC0C0FF   
        .Width = ActiveCell.Width * 2 'アクティブセルの幅を利用
        .Height = ActiveCell.Height  'アクティブセルの高さを利用、ActiveCell.Height * 2 で2倍の高さに
    End With
D2セルを選択しておいて、マクロを実行すると、
NAMAマクロ5
さらに、このコードからコマンドボタンを横に2つ並べるとか縦に2つ並べるなどのコードへ変更することができます。 ActiveCell.Offset(0, 3).Activateとして列を移動させます。
Sub CommandButtonを横で2個()
    ActiveSheet.Range("D2").Select
(*この部分省略*記録マクロから変更2 のコードをそのまま貼り付ける)
    ActiveCell.Offset(0, 3).Activate
    With ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False, DisplayAsIcon:=False)
        .Object.Caption = "ボタン2"
        .Object.Font.Name = "小塚ゴシック Pr6N"
        .Object.Font.Size = 11
        .Object.BackColor = &HFFC0C0
        .Width = ActiveCell.Width * 2
        .Height = ActiveCell.Height  'ActiveCell.Height * 2
    End With
End Sub
実行すると、CommandButtonが2つ横に並んで作成されます。
ActiveXコントロールボタンマクロ5
コマンドボタンを縦に2つ並べて作成するには、上記コードのOffset(0, 3)の部分で、Offset(3, 0)のように、行だけ移動してコードを繰り返せばOKです。