「ワードvbaマクロ フォント名」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。
フォント名を取得するWord VBAのコード、マクロを探していた検索です。
フォント名を取得するサンプルコード
FontオブジェクトのNameプロパティを使えば、フォント名を取得することができます。
例えば、
MsgBox Selection.Font.Name
で、カーソル位置のフォント名がメッセージボックスに表示され、
MsgBox ActiveDocument.Range(0, 1).Font.Name
で、アクティブな文書の1文字目のフォントの名前がメッセージボックスに表示されます。
文書で使われているフォントの名前をすべて取得するサンプルマクロ
実務で使えそうなマクロをご紹介しておきましょう。
文書内で使われている、すべてのフォントの名前を取得するマクロです。
Dim dic As Object
Set dic = CreateObject("Scripting.Dictionary")
On Error Resume Next
Dim rng As Range
For Each rng In ActiveDocument.Characters
dic.Add _
Key:=rng.Font.Name, _
Item:=""
Next
On Error GoTo 0
Dim key As Variant
For Each key In dic.Keys
Debug.Print key
Next
Set dic = Nothing
End Sub上記のマクロを実行すると、アクティブな文書の本文で使われているフォント名がイミディエイトウィンドウに出力されます。
サンプルマクロの解説
上記のマクロでは、DocumentオブジェクトのCharactersコレクションオブジェクトから、1文字ずつRangeオブジェクトを取得するFor Each~Nextループを回しています。
For Each rng In ActiveDocument.Characters
なお、Charactersコレクションオブジェクトのメンバーである単一オブジェクトはRangeオブジェクトですから、
このFor Each~Nectループの中であれば「chr.Font.Name」というオブジェクト式で、1文字ずつフォント名を取得できます。(先にご紹介した「.Range(0, 1).Font.Name」というオブジェクト式と同じ考え方です)
課題は、フォント名を重複なしでどう取得するか、です。
この課題を解決するためにここでは、Scripting.DictionaryオブジェクトのAddメソッドで指定するKeyに、
重複した値を指定するとエラーになる、という特徴を利用しています。
以下のコードを実行するとDictionaryオブジェクトのKeyにフォント名が格納されていきますが、
Set dic = CreateObject("Scripting.Dictionary") For Each rng In ActiveDocument.Characters dic.Add _ Key:=rng.Font.Name, _ Item:=""
同じフォント名が格納済みだったときにはエラーが発生します。
これを逆手にとって、
On Error Resume Next For Each rng In ActiveDocument.Characters
のように、エラーを無視して、とにかくFor Each~Nextループを回すことで、重複のない全フォント名のリストをDictionaryオブジェクトとして作っています。
その後、DictionaryオブジェクトのKeyからフォント名を取り出して、イミディエイトウィンドウに出力しています。
Dim key As Variant For Each key In dic.Keys Debug.Print key Next
最終更新日時:2024-05-23 09:41
Home » ワードマクロ・Word VBAの使い方 » フォント » 使われているフォント名一覧を出力するWordマクロ-Scripting.Dictionary利用