2012年9月18日火曜日

[ExcelVBA] フォントの一覧を取得




コマンドバーからフォントの一覧を取得します。
コマンドバーの情報を取得するには、以下のように指定します。
Application.CommandBars.FindControl(ID:=「取得したコントロールの番号」)

フォントのリストは、ID:1728となっています。

Option Explicit

Sub SampleCode()
    Dim i As Long    
    With Application.CommandBars.FindControl(ID:=1728)
        For i = 1 To .ListCount 'フォントの数分ループを回す
            Debug.Print .List(i) 'リストの要素にアクセスする
        Next
    End With
End Sub

ただし、「オブジェクトの選択」が選択されているとエラーとなってしまいます。

↑オブジェクトの選択:選択状態



エラー画面

よって、オブジェクトの状態をチェックし、
必要に応じてオフにしてから実行する必要があります。
もちろん終了したら元に戻す必要があります。

尚、「オブジェクトの選択」はID:182です。
Option Explicit

Sub SampleCode()
    Dim StateSelectObjectButton As Integer
    StateSelectObjectButton = Application.CommandBars.FindControl(ID:=182).State

    'ボタンを実行する(オンならオフ、オフならオンになる)
    If StateSelectObjectButton = -1 Then _
        Application.CommandBars.FindControl(ID:=182).Execute
    
    Dim i As Long
    With Application.CommandBars.FindControl(ID:=1728)
        For i = 1 To .ListCount
            Debug.Print .List(i)
        Next
    End With
    
    '元の状態に戻す
    'ボタンを実行する(オンならオフ、オフならオンになる)
    If StateSelectObjectButton = -1 Then _
        Application.CommandBars.FindControl(ID:=182).Execute
End Sub
Application.CommandBars.FindControl(ID:=182).Stateは、
オンの時は、-1、オフの時は0が返ってきます。


0 件のコメント: