IT仕事

Excel2013のリボン&タブのカスタマイズで格闘。

投稿日:

今まで、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

-IT仕事

執筆者:

関連記事

no image

まだやってる、IT講師。

今日はWordでPOPを作るセミナー。 いわゆる「おばちゃん」相手。 楽しい。 なかに、とても入力が苦手な人が一人、「産業会館」という字を、「惨状会館」と入力して、しかしどう直してよいか分からなくて悩 …

no image

迷惑メール

仕事にプライベートにYahooメールを使っている。 ここのところ、やけに迷惑メールが多い。 Yahooメールにはオプションで受信拒否やフィルタ機能もあるのでそれらを使ってはいるのだが、それぞれ100ア …

no image

phpESPつまづいたところ

AKI ON WEB: Webアンケートシステム「phpESP」を試してみた を参考に、このソフトのインストールに挑戦。 しかし、DB作成で、まず転ぶ。 mysql_populate.sqlが通らない …

GoogleSpreadSheet上の注文番号をキーにGASでGmailのスレッドにラベルを付加

Gmailにあるメールから、スプレッドシートに記入してある注文番号と、注文入力時につけられた注文ラベルをもとに、スレッドを検索して、検索結果に対して新たなラベル付けをしたかった。 参考Webをもとに、 …

no image

クロネコヤマトの送り状発行ソフトB2で請求先に赤エラーが出てにっちもさっちも

タイトルの通り。数時間悩んだが、結果、何とか分かった。 このブログを見ている諸君は、きっと同じ悩みを抱えてきたのでは? ご請求先顧客コード(たいていは自社の電話番号になっていると思う)と、運賃管理番号 …