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の値を代入します。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を取得する方法についての解説を終了します。ありがとうございました。

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