以下の内容はhttps://www.limecode.jp/entry/fungo/073-add-button-and-assign-macro-new-workbookより取得しました。


73本目:新規ブックにボタン作成しマクロ登録

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で作る、なんてことも可能なんですね。


もしこの仕様が有効な場面に遭遇したら使ってみようと思います。




以上の内容はhttps://www.limecode.jp/entry/fungo/073-add-button-and-assign-macro-new-workbookより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14