MSOffice2007のリボンのカスタマイズについて - 3

以前にも書いたが、Office2007のリボンをカスタマイズするにはCustom UI Editorを使うと便利。

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
  <ribbon startFromScratch="false">
    <tabs>
      <tab id="customTab" label="Contoso" insertAfterMso="TabHome">
        <group id="customGroup" label="Contoso Tools">
          <button id="customButton"
                  label="Custom Button"
                  imageMso="HappyFace"
                  size="large"
                  onAction="Callback" />
        </group>
      </tab>
    </tabs>
  </ribbon>
</customUI>

こんな感じで記述すればいいのだが、ラベルやアイコン等々は後から変えられると楽だ。
また、機能が増えればコールバック関数の名称もカオスになることが予想される。
なにより、Custom UI Editorは使い難いので、ちょっとした改造の度に使いたくない。
わりと普通な考え方だと思うのだが、そこらのサイトのサンプルは、上記のように全ての属性をベタ打ちしてある。
できる限り動的に変更できるようにしたいので、とりあえずメモ。

【ボタンごとにVBAの標準モジュールを一つ作る】
のがいいような気がする。

で、その標準モジュールはこんな風に書いておく。
とりあえずボタンとチェックボックスを1つずつ作ることにする。

【button1.bas】
  Option Explicit

  'Entry point for RibbonX button click
  Sub OnAction(control As IRibbonControl)
      ボタン押下時の処理
  End Sub

  'Callback for RibbonX button label
  Sub GetLabel(control As IRibbonControl, ByRef label)
      label = "ボタン1"
  End Sub

  Sub GetImage(control As IRibbonControl, ByRef image)
      Set image = Application.CommandBars.GetImageMso("HappyFace", 32&, 32&)
  End Sub

  Sub GetSize(control As IRibbonControl, ByRef size)
      size = RibbonControlSize.RibbonControlSizeLarge
      'size = RibbonControlSize.RibbonControlSizeRegular
  End Sub

  Private Sub ボタン押下時の処理()
      ' なんかする
  End Sub
【check1.bas】
  Option Explicit

  Public checked As Boolean

  'Entry point for RibbonX button click
  Sub OnAction(control As IRibbonControl, pressed As Boolean)
      checked = pressed
  End Sub

  Sub GetPressed(control As IRibbonControl, ByRef returnValue)
      returnValue = checked
  End Sub

  'Callback for RibbonX button label
  Sub GetLabel(control As IRibbonControl, ByRef label)
      label = "チェックボックス1"
  End Sub

  Sub GetScreentip(control As IRibbonControl, ByRef tip)
      tip = "ここにチェックボックスの説明を記述"
  End Sub

上記のVBAを記述したファイルをxlam形式で保存後、Custom UI Editorで開く。
内容を次のように編集する。属性が微妙に異なる点に注意。

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
  <ribbon>
    <tabs>
      <tab id="customTab" label="Contoso" insertAfterMso="TabHome">
        <group id="customGroup" label="Contoso Tools">
          <button
            id="button1"
            getLabel="button1.GetLabel"
            getSize="button1.GetSize"
            getImage="button1.GetImage"
            onAction="button1.OnAction"
          />
          <checkBox
            id="check1"
            getLabel="check1.GetLabel"
            getScreentip="check1.GetScreentip"
            getPressed="check1.getPressed"
            onAction="check1.OnAction"
          />
        </group>
      </tab>
    </tabs>
  </ribbon>
</customUI>

コールバック関数の種類やコントロール毎の対応は下記を参照。
2007 Office Fluent リボンをカスタマイズする (開発者向け) (パート 2/3)
2007 Office Fluent リボンをカスタマイズする (開発者向け) (パート 3/3)