VBAからGDI+を使う資料集
inet上の達人の方々から御教示いただいたコードを少しアレンジさせてもらっています(切り貼りとも言います)。
  1. ホーム
  2. ribbon
  3. module


リボンから呼び出す・リボンを制御するVBAコード

2.カスタマイズ用XMLに対応するコード。標準モジュールに記述


出来てみるとなんて事はないのですが、ToggleButtonのCaptionをボタンの状態に応じて変更するのはWebでもみかけません。

Option Explicit
'http://msdn.microsoft.com/ja-jp/library/aa722523.aspx
'http://homepage2.nifty.com/suyamsoft/Ribbon/Excel2010/ContextMenu/index.html
Private rbRibbon As IRibbonUI ' リボン
Private rbButton_Visible As Boolean ' ボタンの表示/非表示
Private rbButton_Enabled As Boolean ' ボタンの有効/無効

Private toggleFlag As Boolean 'トグルボタンのON/OFF

Sub OnLoad(ribbon As IRibbonUI) ' リボンの初期処理 XML側にonLoadの記述要
  Set rbRibbon = ribbon ' リボンの表示を更新できるようにするためにリボンをセットする
  rbButton_Visible = True ' ボタンを表示する
  rbButton_Enabled = True ' ボタンを有効にする
  rbRibbon.Invalidate ' リボンの表示を更新する
End Sub

'ファイル読み込み後、リボンのタブを切り替えた初回のみ出る
Sub ToggleButton1_getPressed(control As IRibbonControl, ByRef returnValue)
  '初期値を設定
  returnValue = toggleFlag
End Sub

Sub ToggleButton1_getLabel(control As IRibbonControl, ByRef label)
'動的なテキスト設定、Invaridateでトグルボタンの状態も元に戻るのでボタン状態初期値も変更要
  If toggleFlag Then
    label = "ON"
  Else
    label = "OFF"
  End If
End Sub

'ToggleButton onAction
'再利用というのと引数が異なる。再利用版は引数は省略できないというエラーが出るので、無印版を使用
Sub ToggleButton1_click(control As IRibbonControl, pressed As Boolean)
  If pressed = True Then
    toggleFlag = True
  Else
    toggleFlag = False
  End If
    'フォームの再描画の様なもの。これを実行するとトグルボタンの状態も元に戻る
    rbRibbon.InvalidateControl control.id
End Sub

Sub CheckBox1_click(control As IRibbonControl, pressed As Boolean)
  MsgBox control.id & "のチェックは" & pressed & "です"
End Sub

'初期値設定用
Sub EditBox1_getText(control As IRibbonControl, ByRef text)
  text = "initial text"
End Sub

Sub EditBox1_change(control As IRibbonControl, text As String)
  MsgBox "EditBoxの内容は " & text & " です"
End Sub

Sub Combo1_change(control As IRibbonControl, text As String)
  MsgBox control.id & "の内容は " & text & " です"
End Sub

Sub Launcher1_click(ByVal control As IRibbonControl)
  UserForm1.Show
End Sub

Sub Button1_click(ByVal control As IRibbonControl)
  MsgBox "MyButtonMacro"
End Sub

Sub Button2_click(ByVal control As IRibbonControl)
  MsgBox "MyOtherButtonMacro"
End Sub

'以降はコンテキストメニュー用
Sub GetVisible(control As IRibbonControl, ByRef returnedVal) ' ボタンの表示/非表示の設定
  returnedVal = rbButton_Visible
End Sub

Sub GetEnabled(control As IRibbonControl, ByRef returnedVal) ' ボタンの有効/無効の設定
  returnedVal = rbButton_Enabled
End Sub

Sub CheckBox_GetPressed(control As IRibbonControl, ByRef returnedVal) ' チェックボックスのチェックのオン/オフの設定
  Select Case control.id
    Case "VisibleCheckBox"
      returnedVal = rbButton_Visible
    Case "EnableCheckBox"
      returnedVal = rbButton_Enabled
  End Select
End Sub

Sub CheckBox_Click(control As IRibbonControl, pressed As Boolean) ' チェックボックスのクリック処理
  Select Case control.id
    Case "VisibleCheckBox"
      rbButton_Visible = pressed ' ボタンの表示/非表示
    Case "EnableCheckBox"
      rbButton_Enabled = pressed ' ボタンの有効/無効
  End Select
  rbRibbon.Invalidate ' リボンの表示を更新する
End Sub

'複数のコントロールのボタンクリック処理を一つのプロシージャで分岐処理させている
Sub Button_Click(control As IRibbonControl) ' ボタンのクリック処理
  Select Case control.id
    Case "DateButton"
      ActiveWindow.RangeSelection.Value = Date ' 選択したすべてのセルに日付を代入
    Case "TimeButton"
      ActiveWindow.RangeSelection.Value = Time ' 選択したすべてのセルに時間を代入
    Case "ColumnCountButton"
      MsgBox Prompt:="選択した列数:" & Selection.Columns.Count, Buttons:=vbInformation, Title:="選択した列数" ' 非連続で選択した場合はただしくありません!
    Case "RowCountButton"
      MsgBox Prompt:="選択した行数:" & Selection.Rows.Count, Buttons:=vbInformation, Title:="選択した行数" ' 非連続で選択した場合はただしくありません!
    Case Else
      MsgBox Prompt:=control.id, Buttons:=vbInformation, Title:="Button Clickd"
  End Select
End Sub

Sub Gallery_OnClick(control As IRibbonControl, id As String, index As Integer) ' ギャラリーのアイテムのクリック処理
  MsgBox Prompt:=Mid(id, 1, Len(id) - Len("Item")), Buttons:=vbInformation, Title:="Gallery Click"
End Sub