アドイン要素
ドキュメント.探すと2007年のページに飛ばされる.これがもとになってるのかも.
https://learn.microsoft.com/en-us/previous-versions/office/developer/office-2007/aa338202(v=office.12)(2022年9月)
これ以降は,customUI.xmlに記載していく要素についての説明.
<!--ここにボタン等の・・・ -->のところ.
参考になりそうなサイト
トグル,チェックボックス,独自アイコンを扱ってる.
https://officeforest.org/wp/2018/05/13/excel%E3%81%A8access%E3%81%AB%E7%8B%AC%E8%87%AA%E3%81%AE%E3%83%AA%E3%83%9C%E3%83%B3%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B/#i-5
どの属性を設定できるかは,各タグによる.
これがわかりやすそう.
https://bettersolutions.com/vba/ribbon/button.htm
各要素についてドキュメント.
https://learn.microsoft.com/en-us/openspecs/office_standards/ms-customui/d842006e-3187-4f66-a17d-0819a3cc94b5
例:マクロを実行するボタン
まず,どんな様子で動くのかを書いておく.
CropImgsというプロシージャ名のマクロを自作した場合,次のコードを書けばでボタンを押すとそれが実行されるようになる.
<button id="button" label="Apply Crop Size" imageMso="AppointmentColor1" onAction="CropImgs" />
アドインに関するエラーは,環境設定 -> 一般 -> アドインユーザインターフェースに関するエラーを表示する にて設定可能.
idはマクロで条件分岐に使える(だけ??他の用途はわからん).idは一意でないとエラー.
labelはボタンの横に表示される文字.
imageMsoはボタンの種類.この場合は赤い四角.
onActionにプロシージャ名を渡す.
onAction属性は必須.ないとボタンが表示されない.存在しない関数でもok.
<box>にlabel属性があるとタブが表示されない.
例2:太字切り替え
<toggleButton idMso="Bold"/>
リボンにあるものなら,そのコマンドのidMsoを指定すれば良い.
ラベル
改行させるには"
".
label="aaaa
bbbb"
自動的に改行してくれるので,なくてもいいかも.
狭いところだと表示されなくなる場合もある.
アイコン
アイコンを検索しやすいサイトがあった.
https://ymrt.jp/imagemso/index.html(2022年9月)
アイコンのドキュメントはどこにあるのか.
imageMSO:(名前だけ画像なし)
https://learn.microsoft.com/ja-jp/openspecs/office_standards/ms-customui/fe2124a1-5aaa-4adf-b285-5d58da9d5e2a
imageMsoを省略した場合,labelの文字のみがボタンに表示される.labelもなかったら何も表示されない.
カーソルを当てた時に表示させるやつ
screentip="カーソルが置かれてます!"
onAction
マクロで引数を扱える.
Sub Func(control As IRibbonControl)
control.Id
control.tag
End Sub
Id, tagはXML要素の属性.
起動時にマクロを呼び出す
https://learn.microsoft.com/en-us/openspecs/office_standards/ms-customui/8a27e852-3f8b-424a-ac67-32c58181e9d3
customUIタグで呼び出すマクロ関数名をonLoard属性に指定する。
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="OnCustomUILoaded" />
タグ
まとめる1 (縦線入る)group
groupごと分けるとgroupの間に縦線が入る.
<group id="customGroup1" label="Shapes and Pictures">
<box id="box1">
<button id="button1" label="Get Crop Size" imageMso="PicturePropertiesSize" onAction="GetIimgCropSize" />
</box>
</group>
<!-- ここに縦の境界が入ります -->
<group id="customGroup1" label="Shapes and Pictures">
<box id="box1">
<button id="button1" label="Get Crop Size" imageMso="PicturesCompress" onAction="GetIimgCropSize" />
</box>
</group>
<tag>は<group>しか持てない.
何をタブに追加するにせよ<group>に入れましょう.
まとめる2 box
<box id="box" boxStyle="horizontal">
<button id="button1" label="Button 1" imageMso="HappyFace" />
<button id="button2" label="Button 2" imageMso="HappyFace" />
</box>
boxStyle
"horizontal", "vertical"
vertical使えないかも?EditBoxで使ったら横に並んでしまう.
あんまり使う必要性感じられない.
親
group, box
ボタン1
<button id="button" label="Button" imageMso="HappyFace" />
ON/OFFトグルボタン
<toggleButton id="toggleButton" imageMso="AppointmentColor3" onAction="Action" getPressed="GetStatus" />
onActoin:
ボタンを押すたびに呼ばれる.
Sub Action(control As IRibbonControl, tgl As Boolean)
MsgBox tgl
' onの状態にした場合True
' offの状態にした場合Falseが渡される
End Sub
getPressed:
押されている状態か.初期化した時に呼ばれる.
Sub GetConfidential(control As IRibbonControl, tgl)
tgl = True
End Sub
チェックボックス
<checkBox id="checkBox" label="CheckBox" />
getImage:
GetImage(control As IRibbonControl, ByRef image)
imageに,imageMSOの文字列あるいはLoadPictureで読み込ませる
文字入力BOX
<editBox id="EditBox" getText="MyTextMacro" label="My EditBox" onChange="MyEditBoxMacro"/>
sizeString属性は,editBoxの入力部分の幅.リボンの占有する範囲はほぼ変わらない.ラベルの文字数減らした方が多分小さくなる.
sizeString="WWWWW"は5文字のWの幅です。文字により幅は変わりますので、英字の場合は文字の幅が広いWかMが良いでしょう。
getText:
入力する文字.初期値もこれで設定できる.
初期化時(タブを切り替える時,IRibbonUI.Invaliidate呼び出し時 etc.)に呼ばれるみたい.
getText(control As IRibbonControl, ByRef text)
ByRef text As Stringとすると、マクロがありませんエラーなので注意。
showLabel
これかgetShowLabelを指定しないならlabeを指定するべき.
labelなし,これも無しだと余白をかなり取られる.
onChange:
変更があった時に実行されるマクロを指定する.
テキストを受け取るやつの場合,次のように設定できる.
Public Sub MyEditBoxMacro(ByRef control As IRibbonControl, ByRef text As String)
MsgBox text
End Sub
メニュー(ボタンのツリー構造作れる)
<menu id="menu1" label="データの
エクスポート" itemSize="large" imageMso="ExportExcel" size="large">
<button id="button1" label="opt1" imageMso="AppointmentColor3" onAction="ho" />
<button id="button2" label="opt2" imageMso="AppointmentColor3" onAction="ge" />
<menuSeparator id="menuSeparator2" titl
e="〜〜横線を入ります〜〜" />
<menu id="menu2" label="メニューinメニュー" itemSize="large" imageMso="AppintmentColor1">
<button id="button3" label="opt3" imageMso="AppointmentColor1" onAction="hoge" />
</menu>
</menu>
ドロップダウン 一つ選ぶやつ
<dropDown id="dropDown" label="DropDown">
<item id="item1" label="Item 1" />
<item id="item2" label="Item 2" />
<item id="item3" label="Item 3" />
<button id="button" label="Button..." />
</dropDown>
getSelectedItemIndex:
どれを選択させるか.要素インデックスで指定ver,.初期値はこれかElemID ver.でやる.
GetSelectedItemIndex(control As IRibbonControl, ByRef index)
getSelectedItemID:
どれを選択させるか.要素IDで指定ver,.初期値はこれかIndex ver.でやる.
GetDropDownScalebar(control As IRibbonControl, ByRef Elemid)
onAction:
選択時に呼び出す関数.
onAction(control As IRibbonControl, itemID As String, index As Integer)
なお,indexは0始まり.
ボタンとメニューの組み合わせ SplitButton
<splitButton id="splitButton" size="large" >
<button id="button" imageMso="HappyFace" label="Split Button" />
<menu id="menu">
<button id="button1" label="Button 1" />
<button id="button2" label="Button 2" />
</menu>
</splitButton>
各種コマンドに反応する??
<commands>
<command idMso="Bold" enabled="false" />
<command idMso="Paste" onAction="MyPasteFunction" />
</commands>
属性
keytip
3文字以内?
z2連続はできない。
2回目のzを押した時点で戻る操作になる。
xzsができない。
sを押した時点で戻る操作になる。
すでにある機能 idMso
idMsoを指定すると、すでにオフィスにある機能を使用することができる。(最前に配置するとか)
idMsoに合った正しいタグを使用する必要があると思う。
idMsoはクイックアクセスツールバーの設定画面で、それぞれの項目にマウスをホバーすると表示される。(Macは無理?)
公式でリストが公開されているけど、古いものでこれがすべてではない。
アイコン
アイコン非表示
showImage="false"
アイコン設定
アイコンは以下のいずれかの属性で設定する。
getImage, image, imageMso
getImageの詳細は不明。
iamgeは自作アイコンを設定できる。設定方法の詳細後述。
imageMsoはオフィスで用意しているアイコンを設定できる。idMsoと同じ値を指定すれば、そのidMsoのアイコンが表示される。
自作アイコンの設定方法
自作アイコンを設定するのは以下のように行う。
1. customUI/_relsディレクトリを作成する。
ディレクトリに"customUI.xml.rels"ファイルを作成する。
中身は次のように記述する。
<?xml version="1.0" encoding="utf-8"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" Target="images/SmartArtSmallerShape.bmp" Id="SmartArtSmallerShape"/>
</Relationships>
2. customUI/iamgesディレクトリを作成する。
ここに自作アイコンを配置する。サイズは64x64で十分な気がする。
3. customUI/customUI.xmlの該当場所にimage属性を追記する。
image="アイコン名(拡張子なし)"を設定する。