いよいよメニューバーを作ります。
標準モジュールに下記のようにコーディングします
Sub Auto_Open()
With MenuBars(xlWorksheet).Menus.Add("ToolBox")
With .MenuItems.AddMenu("01 Tech")
.MenuItems.Add "ポンプ揚程換算", "テンプレ呼び出しマクロ"
.MenuItems.Add "ダミー", "テンプレ呼び出しマクロ"
End With
End With
End Sub
上のコードを VBAにコピペ⇒保存(マクロ付きエクセルである.xlsmとして保存して下さい)⇒再び起動
としてみてください。メニューバーに「アドイン」が出て、そこにToolBoxというメニューが出来ているはずです。
メニューバーを作るマクロとして、多くのサイトでset関数を使って下記のようにメニューを作っているのですが、これだとメニューを毎回削除しないといけないし、上の方がシンプルだと思います。
(例 set関数を使ったメニューを作るコード)
Dim NewMenu As Variant
Set NewMenu = Application.CommandBars("Worksheet Menu Bar").Controls.Add(Type:=msoControlPopup)
NewMenu.Caption = "テストメニュー"
先ほど作ったメニューを選択しても、エラー画面が出てきます。
これは、"テンプレ呼び出しマクロ"というマクロが無い為です。
テンプレ呼び出しマクロを作ります。以下のようにコーディングします。
Sub テンプレ呼び出しマクロ()
Dim pn As String
Dim fn As String
'テンプレートファイルを保存した共有サーバのフォルダパスを変数pnに入れる。
'最後に\マークを入れるのがポイント。なお、pnとはpass nameの略。
pn = "D:\21 IT\02 Tool Box\02 Tools\"
'ファイル名をfnに入れる
fn = "0101 ポンプ揚程単位換算.xltx"
'ファイルがない場合のエラー処理
If Dir(pn & fn) = "" Then
MsgBox "テンプレートファイルが無いか、リンクが切れています"
Exit Sub
End If
'エクセルテンプレートファイルを開く
Workbooks.Add (pn & fn)
End Sub
これで、テンプレートファイルを開くマクロの完成です。
共有サーバが"D"ドライブに割り当てられているものとして、テンプレート保存ファイルまでのパスを変数pnに入れました。
そこをそれぞれの組織の共有サーバに変えてください。
ファイル名は、前章で作った0101 ポンプ揚程単位換算.xltxにしています。
先ほどテンプレートファイルを開くマクロを作りましたが、メニューに作った"ダミー"を押しても0101 ポンプ揚程単位換算.xltxが開かれてしまうので、このプログラムの汎用性を上げます。
メニューバーで「テンプレ呼び出しマクロ」を起動するだけではなく、変数「fn」にファイル名を代入できるようにします。
これは、メニューバーマクロの方も一部書き換えます。(太字部)
Sub Auto_Open()
With MenuBars(xlWorksheet).Menus.Add("ToolBox")
With .MenuItems.AddMenu("01 Tech")
.MenuItems.Add "ポンプ揚程換算", "'テンプレ呼び出しマクロ ""0101 ポンプ揚程単位換算.xltx""'"
.MenuItems.Add "ダミー", "'テンプレ呼び出しマクロ ""次のテンプレートファイル""'"
End With
End With
End Sub
Sub テンプレ呼び出しマクロ(fn As String)
Dim pn As String
'テンプレートファイルを保存した共有サーバのフォルダパスを変数pnに入れる。
'最後に\マークを入れるのがポイント。なお、pnとはpass nameの略。
pn = "D:\21 IT\02 Tool Box\02 Tools\"
'ファイルがない場合のエラー処理
If Dir(pn & fn) = "" Then
MsgBox "テンプレートファイルが無いか、リンクが切れています"
Exit Sub
End If
'エクセルテンプレートファイルを開く
Workbooks.Add (pn & fn)
End Sub
呪文のように上記のようにコーディングすると動くかと思います。
"'テンプレ呼び出しマクロ ""0101 ポンプ揚程単位換算.xltx""'"
ここの部分は、
テンプレ呼び出しマクロ(0101 ポンプ揚程単位換算.xltx)
と書きたくなりますが、これだとエラーになります。
次に書きたくなるのが、
テンプレ呼び出しマクロ "0101 ポンプ揚程単位換算.xltx"
というコードですが、これでもエラーが出ます。
引数をダブルクオテーション""で囲うのは良いのですが、2重のダブルクオーテーションで囲う必要があります。
テンプレ呼び出しマクロ ""0101 ポンプ揚程単位換算.xltx""
けど、これでも未だ駄目で、全体的にダブルクオテーションとシングルクオテーションで囲う必要があります。
"' テンプレ呼び出しマクロ ""0101 ポンプ揚程単位換算.xltx"" '"
というかなりイケてない複雑な構造で引数を渡せます。これが分かるのには筆者も時間が掛かりました。