「リボンのトグルボタン」で回答したコードです(下に記載しているコードは一部変更しています。)。
リボン上に複数のtoggleButton要素を設定したとき、いずれかのtoggleButton要素を選択したい → 1つのtoggleButton要素しかオンにできないようにしたい、という内容の質問でした。
この処理を実現するためにはtoggleButton要素のgetPressed属性のコールバックとonAction属性のコールバックを使います。
[リボンXML]
<?xml version="1.0" encoding="utf-8"?>
<customUI onLoad="tglSample_onLoad" xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon>
<tabs>
<tab id="tabSample" label="Sample Tab">
<group id="grpSample" label="Sample Group">
<toggleButton id="tglSample1" label="tgl1" size="normal" getPressed="tglSample_getPressed" onAction="tglSample_onAction" />
<toggleButton id="tglSample2" label="tgl2" size="normal" getPressed="tglSample_getPressed" onAction="tglSample_onAction" />
<toggleButton id="tglSample3" label="tgl3" size="normal" getPressed="tglSample_getPressed" onAction="tglSample_onAction" />
<toggleButton id="tglSample4" label="tgl4" size="normal" getPressed="tglSample_getPressed" onAction="tglSample_onAction" />
<toggleButton id="tglSample5" label="tgl5" size="normal" getPressed="tglSample_getPressed" onAction="tglSample_onAction" />
<toggleButton id="tglSample6" label="tgl6" size="normal" getPressed="tglSample_getPressed" onAction="tglSample_onAction" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>
[標準モジュール]
Option Explicit
Private myRibbon As IRibbonUI
Private flgTgl As Long
Private Sub tglSample_onLoad(ribbon As IRibbonUI)
Set myRibbon = ribbon
flgTgl = 0 '初期化
End Sub
Private Sub tglSample_getPressed(control As IRibbonControl, ByRef returnedVal)
Select Case flgTgl
Case 0
returnedVal = False
Case Else
If Right$(control.ID, 1&) = CStr(flgTgl) Then
returnedVal = True
Else
returnedVal = False
End If
End Select
End Sub
Private Sub tglSample_onAction(control As IRibbonControl, pressed As Boolean)
If pressed Then
flgTgl = CLng(Right$(control.ID, 1&))
myRibbon.Invalidate
End If
End Sub
上記コードを設定したファイルを開くと、”Sample Tab“タブとその中に6個のtoggleButton要素が表示されます。

「tgl1」がオンになっている状態で「tgl2」をクリックしてオンにすると、

「tgl1」がオフ「tgl2」がオンになり、1つのtoggleButton要素しかオンにできないことが確認できます。














この記事へのコメントはありません。