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)