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

フリーブラシ

幾何学模様を使ったバナーをどうやって作るのか、よくわかっていない。 時間に追われ、いつも腐心して、それでもなんとかかんとか、それなりに作っているのだが、これではいけないと自分でも思っている。 今日は時 …

no image

パンフ

今日、ちょっとした託物があってお客様のところを訪ねた。 またついでに、このたび新しく制作した会社案内もついでに見てもらおうと持参した。 対応した女性に肝心のをお渡しした後、「会社案内をこのたび新しくし …

no image

速いパソコン? いらん

「だっておわっちゃ、速過ぎるとついていけんもんに」 PCセミナー受講生の名言。

no image

sendmail

ローカルで使うPHPのメール(sendmail)の利用環境を構築。 愛用しているXaioにはメールサーバが入っていないので、 http://tokyo.atso-net.jp/pukiwikip/?S …

no image

IME2007だめだめ

Office2007にしてから日本語入力の変換が重くて重くて仕方がない。 もしやと思うと、やっぱり。 IMEがバージョンアップして「2007」になっていた。 IME2007だめだめ。 ネット検索すると …