【入門編】Word VBAで『フォントの埋め込み』をチェックする:文書の互換性を保つための自動診断 – Word VBA解析バイブル

スポンサーリンク

こんにちは。Word VBAの深淵へようこそ。

「マクロの記録」ボタンを押して生成されたコードの羅列に、息苦しさを感じていませんか?「なぜか動くけれど、なぜ動いているのか分からない」という状態から脱却し、Wordの心臓部を直接操作する感覚を手に入れる。今日は、その第一歩として「文書の互換性を守る守護神」となる自動診断ツールを一緒に作っていきましょう。

テーマは『フォントの埋め込み』の自動チェックです。この設定漏れは、美しいレイアウトを台無しにする「現場の悲劇」の元凶。これをVBAで封じ込めます。

1. Wordオブジェクトモデルという「階層構造」を理解する

Word VBAを操るには、まずWordがどのように文書を管理しているかを知る必要があります。

  • Application: Wordそのもの。全ての親。
  • Document: 開いている文書。
  • Range: 文書内の「場所」や「範囲」。文字の塊。

今回の「フォントの埋め込み」設定は、個別の文字ではなく「文書そのものの設定」に関わるため、`Document`オブジェクトを操作することになります。

2. なぜ「設定値」に直接アクセスするのか

Wordには数多くの設定がありますが、これらは`Document.EmbedTrueTypeFonts`というプロパティ(属性)に格納されています。

初心者が陥りやすい罠は、「画面上のメニューを必死に探そうとすること」です。VBAでは、「設定値=プロパティ」に直接True(真)かFalse(偽)を代入する。これだけでWordの設定は即座に書き換わります。これがVBAの真骨頂です。

3. 実装:フォント埋め込みチェック&自動修正ツール

以下のコードをVBAエディタ(Alt + F11)に貼り付けてください。

‘ ———————————————————
‘ 文書のフォント埋め込み設定を診断・修復するモジュール
‘ ———————————————————
Sub CheckAndFixFontEmbedding()
Dim doc As Document
Set doc = ActiveDocument ‘ 現在アクティブな文書を対象にする

‘ フォント埋め込みが有効かチェック
‘ EmbedTrueTypeFonts が False なら埋め込まれていない
If doc.EmbedTrueTypeFonts = False Then

Debug.Print “フォント埋め込み設定:未設定”

‘ ユーザーに確認を促すか、自動修復するかを選択させるのがプロの作法
If MsgBox(“フォントの埋め込み設定がオフです。自動修復しますか?”, _
vbYesNo + vbQuestion, “互換性チェック”) = vbYes Then

‘ プロパティにTrueを代入し、埋め込みを有効化
doc.EmbedTrueTypeFonts = True

MsgBox “フォントの埋め込みを有効にしました。”, vbInformation
End If

Else
MsgBox “フォントの埋め込みは既に有効です。安心してください!”, vbInformation
End If

‘ ここで「メモリの解放」を意識するのはアーキテクトの嗜み
Set doc = Nothing
End Sub

コードのここがポイント!

  • `ActiveDocument`: 「今開いているファイル」を指し示す魔法の言葉です。
  • `doc.EmbedTrueTypeFonts`: これがWordの内部設定と直接通信するパイプラインです。
  • `Set doc = Nothing`: オブジェクト変数に `Nothing` を代入することで、メモリをクリーンに保ちます。大規模な処理を行う際、この小さな配慮が「重いマクロ」を「軽快なツール」に変えます。

4. 陥りやすい罠と解決策

罠1:読み取り専用のファイルを開いている

もし文書が「読み取り専用」で開かれていたり、保護されていたりする場合、このコードはエラーを吐いて停止します。
対策: `If doc.ReadOnly = False Then` というチェックを先頭に入れましょう。

罠2:設定したのに保存しない

コードで設定を変えても、保存しなければ元通りです。
対策: 必要に応じて `doc.Save` を最後に実行する処理を加えると、さらに強力なツールになります。

最後に:エンジニアとしての第一歩

「フォントの埋め込み」という小さな設定を自動化する。一見地味ですが、これは「Wordの内部設定を自分の意のままに操る」という体験そのものです。

ここをクリアできれば、あなたはもう「マクロの記録」に頼るだけの初心者ではありません。Wordのオブジェクトモデルという「地図」を手に入れたのですから。

次は、文書内の特定の単語を検索して色を変える、あるいは表のデータを抽出するなど、より複雑な操作へと進んでいきましょう。VBAの世界は広大です。あなたの業務効率化を、私は心から応援していますよ。

それでは、また次のコードでお会いしましょう。ハッピー・プログラミング!

タイトルとURLをコピーしました