今まで、BookのXMLにリボンメニューを仕込むのは難しいのだと思っていた。
実際、Excel2003でアドインメニューを作ったことがあるが、そのときは相当苦労した。
しかし無料のツールを使えば、かなり簡単にリボンにメニューを配置できることがわかった。
Excel 2007 アドインでリボンメニューを作成する方法: ある SE のつぶやき
自分の場合、こちらの記事を参考に、以下のようなコードを書いた。
Office 2007/2010・リボンのカスタマイズ 初心者備忘録
Sub Ribbon_onLoad(ribbon As IRibbonUI) Set myRibbon = ribbon Call myRibbon.ActivateTab("customTab") End Sub
ファイルをロードした直後にリボンにカスタムタブをセットするという、単にこれだけですが、結構このコードにするのに時間がかかった。
また、Excelを起動してからファイルを開くとカスタムタブは自動で開くが、エクスプローラからのダブルクリックでファイルを開くと、リボンのカスタムタブが開かずにホームタブのまま。。。
さらに、Workbook_Openの際の処理(IF文でパスワードチェック)と、Ribbon_onLoadの際の処理が、バッティングしているような感じで、ファイルを開くときに、「オブジェクト変数または With ブロック変数が設定されていません」エラーが出ることも。
半日ぐらいあれこれいじって悩んで、結局、Ribbon_onLoadに入れてしまえばよいのではないかと考え、そうしたら、うまくいった。以下のコードに落ち着いた。
起動時は、ExcelのOpenなどの通常のイベントの後に、リボン関係のXMLがロードされる、そんな順番になっている、ということかな。
Sub Ribbon_onLoad(ribbon As IRibbonUI) Set myRibbon = ribbon Call myRibbon.ActivateTab("customTab") '以下、ThisWorkbookのOpenイベントに書いたものを移動 Dim Sht As Worksheet, ActSht As String, r As String Application.ScreenUpdating = False If Sheets("system").Range("A1") = "" Then '1なら管理者、空白なら職人がログイン If InputBox("パスワード") = "aaa" Then Call ForAdminMeisai Sheets("system").Range("A1") = 1 Else MsgBox "パスワードが違います" Application.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"",False)" End If Else End If Application.ScreenUpdating = True End Sub