2012年9月18日火曜日

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




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

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

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

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

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



エラー画面

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

尚、「オブジェクトの選択」はID:182です。
  1. Option Explicit  
  2.   
  3. Sub SampleCode()  
  4.     Dim StateSelectObjectButton As Integer  
  5.     StateSelectObjectButton = Application.CommandBars.FindControl(ID:=182).State  
  6.   
  7.     'ボタンを実行する(オンならオフ、オフならオンになる)  
  8.     If StateSelectObjectButton = -1 Then _  
  9.         Application.CommandBars.FindControl(ID:=182).Execute  
  10.       
  11.     Dim i As Long  
  12.     With Application.CommandBars.FindControl(ID:=1728)  
  13.         For i = 1 To .ListCount  
  14.             Debug.Print .List(i)  
  15.         Next  
  16.     End With  
  17.       
  18.     '元の状態に戻す  
  19.     'ボタンを実行する(オンならオフ、オフならオンになる)  
  20.     If StateSelectObjectButton = -1 Then _  
  21.         Application.CommandBars.FindControl(ID:=182).Execute  
  22. End Sub  
Application.CommandBars.FindControl(ID:=182).Stateは、
オンの時は、-1、オフの時は0が返ってきます。


0 件のコメント: