エクセル研究室−Excelの基本的な使い方、応用技を紹介

コマンドボタンの表示名を動的に変化させる

コマンドボタンの表示名を動的に変化させる



コマンドボタンの表示名を動的に変化させる方法です。


コマンドボタンの表示名を動的に変化


コマンドボタンの表示名を動的に変化

リボンで動的にlabelを切り替えるにはXMLの記述で「getLabel」を使用します。
「get」と付くので取得のみと思われがちですが、設定も出来ます。
ボタンを押して更新するのはあくまで「Button2」をクリックした時に表示名を変更するので、VBAのInvalidateControlの記述は「Button2」のOnAtionに設定してある「Macro2」に記述します。
「Macro1」はファイルオープン時とInvalidateControl実行時に実行されます。
また、XMLの「<customUI ・・>」に「onLoad="***"」を入れます。これはファイル起動時に自動的に実行するコードを意味します。


VBAの方では

XML・customUI.xmlの記述例:



<?xml version="1.0" encoding="Shift_JIS" ?>
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="MyAddInInitialize">
  <ribbon>
    <tabs>
      <tab id="CustomTab" label="テスト">
        <group id="Group1" label="テストグループ1">
          <button id="Button1" imageMso="FileSave" getLabel="Module1.Macro1" size="large" onAction="Module1.Macro3" />
          <toggleButton id="Button2" imageMso="FileClose" label="テストコマンド1" size="large" onAction="Module1.Macro2" />
        </group >
      </tab>
    </tabs>
  </ribbon>
</customUI>




VBA・標準モジュール、Module1の記述例:



Dim B As Boolean
Dim MyRibbon As IRibbonUI

Sub MyAddInInitialize(Ribbon As IRibbonUI)
    Set MyRibbon = Ribbon
End Sub

Sub Macro3(control As IRibbonControl)
'Bの変数の値によって実行する内容を変える
    If B = True Then
        MsgBox "「オン」モードで実行します"
    Else
        MsgBox "「オフ」モードで実行します"
    End If
End Sub

Sub Macro1(control As IRibbonControl, ByRef label)
'Bの変数の値によって表示文字を変える
    If B = True Then
        label = "O N"
    Else
        label = "OFF"
    End If
End Sub

Sub Macro2(control As IRibbonControl, ByRef returnValue)
    MsgBox IIf(returnValue, "オンにします", "オフにします")
    'トグルボタンのオン、オフの状態を変数Bに代入
    B = returnValue
    '指定のIDのコマンドを更新する
    MyRibbon.InvalidateControl "Button1"
End Sub









リボンのカスタイマイズ方法トップ