Excel VBA コマンドバーのボタンイメージ FaceIDを取得する

スポンサーリンク
スポンサーリンク

コマンドバーのボタンイメージ(アイコン)一覧を表示する

コマンドバーを表すCommandBar【コマンドバー】オブジェクトを
追加するにはCommandbars【コマンドバーズ】コレクションの
Add【アド】メソッドを使用して作成し
コマンドバーのコントロールを表す
CommandBarControls【コントロールバーコントロールズ】コレクションの
Add【アド】メソッドでCommandBar【コマンドバー】オブジェクトを
「ボタン」に設定したしてコントロールを追加した場合
コマンドバーのコントロールを表す
CommandBarControl【コマンドバーコントロール】オブジェクトの
FaceID【フェイスアイディ】プロパティに
Excelに登録されているボタンの「アイコン」を
ID(番号)で設定することができますが
「アイコン」と「ID」がわからないので
「アドイン」タブのリボンにすべての「アイコン」と
「ID」を表示するコードをご紹介します。

実行後


コード例

Sub アイコン()
Dim コマンドバー As CommandBar
Dim コントロール As CommandBarControl
Dim i As Integer
On Error Resume Next
Application.CommandBars("FaceId").Delete
Set コマンドバー = Application.CommandBars.Add(Name:="FaceId", Temporary:=True)
For i = 1 To 27964
Application.StatusBar = "実行中..." & Left(String(Int(i / 27964 * 10), "■") & String(10, "□"), 10)
Set コントロール = コマンドバー.Controls.Add(Type:=msoControlButton, Temporary:=True)
With コントロール
.FaceId = i
.TooltipText = i
End With
Next
コマンドバー.Visible = True
Application.StatusBar = False
MsgBox "処理が終了しました。"
End Sub

コードの解説

2行目
【Dim コマンドバー As CommandBar】

コマンドバーを表すCommandBarオブジェクトを格納する
変数「コマンドバー」をオブジェクト型(Commandber)で
宣言します。


3行目
【Dim コントロール As CommandBarControl】

コマンドバーのコントロールを表す
CommandBarControlオブジェクトを格納する
変数「コントロール」をオブジェクト型(CommandBarControl)で
宣言します。


4行目
【Dim i As Integer】

ボタンアイコンのID(番号)を格納する
カウンタ―変数「i」を整数型(Integer)で宣言します。


5行目
【On Error Resume Next】

次の行6行目で
CommandBarオブジェクトのDelete【デリイト】メソッドで
「FaceID」という名前のCommandBarオブジェクトを削除する
命令をだしますが、対象オブジェクトが存在しない場合
エラーが発生してデバックモードになってしまうので
On Error【オンエラー】ステートメントの
Resume Next【リズームネクスト】ステートメントを使用して
エラーを無視して処理を続行させます。


6行目
【Application.CommandBars(“FaceId”).Delete】

次の7行目で
コマンドバーを追加しますが
既に同じ名前のコマンドバーが存在していると
エラーになるので
Applicationオブジェクトの
CommansBars【コマンドバーズ】プロパティで
名前が「FaceID」のCommandBarオブジェクトを参照して
存在する場合は削除します。


8行目
【Set コマンドバー = Application.CommandBars.Add(Name:=”FaceId”, Temporary:=True)】

CommandBars【コマンドバーズ】コレクションの
Add【アド】メソッドを使用してコマンドバーを追加して
オブジェクト変数に「コマンドバー」に代入します。
引数Temporary【テンポラリ】にTrueを設定して
Excelの終了時に追加したコマンドバーを削除する設定にします。


9行目
【For i = 1 To 27964】

For文で繰り返し処理の始まりです。
カウンタ―変数のiに繰り返し処理の中で
順次1~27964の値を代入します。


10行目
【Application.StatusBar = “実行中…” & Left(String(Int(i / 27964 * 10), “■”) & String(10, “□”), 10)】

約3万回の繰り返し処理になり少し時間がかかるので
進捗状況をステータスバーに表示します。
コードの解説は時間のかかるマクロの進捗状況を表示する
をご覧ください。


11行目
【Set コントロール = コマンドバー.Controls.Add(Type:=msoControlButton, Temporary:=True)】

CommandBarControls【コマンドバーコントロールズ】コレクションの
Add【アド】メソッドを使用して
コマンドバーにコントロールを追加します。
引数Typeにコントロールのタイプを「ボタン」に設定して
オブジェクト変数の「コントロール」に代入します。


12行目
【With コントロール】

Addメソッドで追加したCommandBarBotton【コントロールバーボタン】オブジェクトが
代入されているオブジェクト変数「コントロール」を
Withステートメントで指定します。


13行目
【.FaceId = i】

Withステートメントで指定した
CommandBarControlオブジェクトを表す
オブジェクト変数「コントロール」の
FaceID【フェイスアイディ】プロパティに
アイコン番号を表すカウンタ―変数iを設定します。


14行目
【.TooltipText = i】

ポップアップヒントを表す
TooltipText 【ツールチップテキスト】に
IDを変数iで設定します。


17行目
【コマンドバー.Visible = True】

CommandBarオブジェクトの
Visible【ビジブル】プロパティで
作成したコマンドバーを表示します。


18行目~19行目
【Application.StatusBar = False
MsgBox “処理が終了しました。”】

Applicationオブジェクトの
StatusBar【ステータスバー】プロパティにFalseを
設定して進捗状況を表示した
ステータスバーを非表示にして
MsgBox関数を使用してメッセージを表示します。


※処理終了のメセージボックスのOKボタンをクリックすると
「アドイン」ダブが追加され、「アドイン」タブのリボンに
アイコンが表示されますが、「アドイン」タブを選択時に表示されるまでに
少し時間がかかります。


以上で
コマンドバーのボタンイメージ FaceIDを取得する方法についての
解説を終了します。
ありがとうございます。

スポンサーリンク
スポンサーリンク

フォローする

スポンサーリンク
スポンサーリンク