Excel&VBA解説サイト「エクセルの神髄」様出題の問題集、
「VBA100本ノック」に対する私の回答と解説のページです。
100本ノックの出題リストはこちらから
excel-ubara.com
出題:新規ブックにボタン作成しマクロ登録
#VBA100本ノック 73本目
新規ブックを作成し、先頭シートにフォームコントロールのボタンを作成します。
・Captionは「テスト」
・登録するマクロはThisWorkbookのプロシージャー「test」
・位置および大きさは任意
新規ブックはThisWorkbookと同一フォルダにxlsxで保存。

◇ 出題ページはこちら
ソースコード
Option Explicit ' 100本ノック073:新規ブックにボタン作成しマクロ登録 Sub マクロボタン付き新規ブックを出力する() Dim Path保存フォルダ As String Path保存フォルダ = ThisWorkbook.Path Dim 保存ファイル名 As String 保存ファイル名 = WS実行シート.Range("C2") Dim FullPath保存ファイル As String FullPath保存ファイル = Path保存フォルダ & "\" & 保存ファイル名 & ".xlsx" If Dir(FullPath保存ファイル) <> "" Then MsgBox "この名前のファイルは既に出力済みです。" Exit Sub End If Dim wb出力ブック As Workbook: Set wb出力ブック = Workbooks.Add Dim ws設置シート As Worksheet: Set ws設置シート = wb出力ブック.Worksheets(1) Dim 設置セル As Range Set 設置セル = ws設置シート.Range("B2") Dim 設置ボタン As Button Set 設置ボタン = ws設置シート.Buttons.Add(設置セル.Left, 設置セル.Top, 設置セル.Width, 設置セル.Height) 設置ボタン.Caption = "テスト" 設置ボタン.OnAction = "'" & ThisWorkbook.Name & "'!ThisWorkbook.test" wb出力ブック.SaveAs FullPath保存ファイル End Sub
解説
シンプルな処理が続くマクロです。
コメントもほとんど書きませんでしたが、
ソースコードを見れば処理はつかめるのではないかと思います。
ボタンの設置は完全にセルにはめてみました。
Left、Top、Width、Hightをそのまま入れるだけで実装できますので、
図形の挿入時はこの手法も活用してみてください。
コードの解説は特にありませんが、
WorksheetのButtonsプロパティは非表示のメンバーのため、
通常のままだとインテリセンスが効きません。
これを効かせたい場合は、F2オブジェクトブラウザーを開き、
右クリック ⇒ 「非表示のメンバーを表示」
をONにして、すべてのプロパティを表示してください。

まあ、といってもWorksheetのButtonsプロパティは返り値が「As Object」のため、
非表示のメンバーを表示しても.Addの引数ヒントは出ないんですけどね。
余談ですが、フォームボタンにマクロを登録するだけならxlsxでも問題ないことを、
このノックを解いて初めて知りました。
プログラムは共有サーバー上マザーファイルに保存しておき、
配布ファイルはxlsxで作る、なんてことも可能なんですね。
もしこの仕様が有効な場面に遭遇したら使ってみようと思います。