Microsoft Excel VBA - Excelのアイコンの一覧を取得する方法

◆概要

このページは、CommandBarsコレクションのコマンドに組み込むことができるアイコンの一覧を取得するプロシージャを紹介します。



コマンドバーに組み込むコマンド(Add メソッドの引数Type の定数がmsoControlPopup のもの)だけ、ボタン表面に文字列とともにアイコンが表示できます。これは、このオブジェクトがFaceId プロパティにアイコンの番号をセットすることによって実現できます。しかし、オンラインヘルプを見ても、どのアイコンがどの番号なのかはわかりません。そこで、アイコンと番号を表示するコマンドを組み込んだコマンドバーを作成してみます。このプロシージャを実行すると、450弱のアイコンとそのFaceIDの値がメニューとして表示されます。  作り方はいたって簡単で、新しいコマンドバー「アイコン」を作成し、2つのFor...Nextループでメニューを15個作成します。メニューを1個作成するたびに、内側のFor...Nextループでコマンドを30個作成します。コマンドには、FaceIDプロパティに式で番号をセットし、同じ番号をCaptionプロパティにセットします。これを繰り返すと、メニューひとつにつき30個のコマンドがアイコンと番号付きで作成され、このメニューが15個作成されます。 ここでは、450個弱のアイコンしか表示していませんが、Excelが保有するアイコンはもっとたくさんあるようです。ループの回数を増やせば、さらにアイコンを表示できるでしょう。このプロシージャでアイコンの絵柄とその番号を把握すれば、カスタムメニューに活用することができます。

◆Sample code
次のコードを実行すると、Excelのツールバーにアイコンのツールバーが追加されます。


Excel 2007では、アドインリボンが追加され、そこにボタンが追加されます。

Sub ShowcmdButtonIcon()
    Dim i As Integer
    Dim j As Integer
    
    'エラーを無視する
    On Error Resume Next
    'アイコンコマンドバーがあれば削除する
    CommandBars("アイコン").Delete
    
    CommandBars.Add Name:="アイコン", Position:=msoBarTop, Temporary:=False
    CommandBars("アイコン").Visible = True
    
    For j = 0 To 15
        Set IconMnu = CommandBars("アイコン").Controls.Add( _
                    Type:=msoControlPopup)

        IconMnu.Caption = "アイコン" & j

        For i = 1 To 30
            Set SubMenu = IconMnu.Controls.Add(Type:=msoControlButton)
            With SubMenu
                .Caption = "アイコンNo: " & i + (30 * j)
                .FaceId = i + (30 * j)
            End With
        Next i

    Next j

End Sub
  

◆実行結果

実行結果
Excel2002の場合


Excel2007の場合は、アドインリボンの中に表示される

◆ツールバーの削除方法
このマクロで追加されたカスタムツールバーを削除するには、メニューの何もないところで右クリックし、表示されたショートカットメニューからユーザー設定を選択します。するとユーザー設定ダイアログボックスが表示されますので、[ツールバー]タブのツールバーで[アイコン]を選び、削除ボタンを押します。


Excel2007の場合
追加されたボタンを右クリックして、表示されたメニューから「ユーザー設定のコマンドの削除」をクリックします。


次のマクロは、追加されたボタンを削除します(excel97/2002/2003/2007で有効)。

Sub DeletecmdButtonIcon()
    'エラーを無視する
    On Error Resume Next
    'アイコンコマンドバーを削除する
    CommandBars("アイコン").Delete
End Sub
  

◆解説

上の例で、引数PsitionにmsofBarFloatingを指定すると、コマンドバーはフローティングコマンドバー(固定されないコマンドバー)になります。

Position:=msoBarFloating

また、引数Temporaryにtrueを指定すると、Excelを終了した時点で追加したコマンドバーは削除されます。

Temporary:=True
引数Positionで使用する引数一覧(MsoBarPositionクラス)
定数 説明
msoBarLeft 0 ウィンドウの左端
msoBarTop 1 ウィンドウの上端
msoBarRight 2 ウィンドウの右端
msoBarBottom 3 ウィンドウの下端
msoBarFloating 4 固定されない
msoBarPopup 5 ショートカットメニューとして作成される
msoBarMenuBar 6 Macintoshのみ

引数Typeで指定する定数一覧(MsoControlTypeクラス)
定数 説明
msoControlButton 1 ツールバーボタン
msoControlEdit 2 エディットボックス
msoControlDropdown 3 ドロップダウンリストボックス
msoControlComboBox 4 コンボボックス
msoControlPopup 10 サブメニューを持つメニュー

▼ページトップへ