Wordの「スタイル」をVBAで操作する(Word)

Wordの「スタイル」をVBAで操作する

ウチの職場には、書類の英数字は等幅という謎ルールがある。

まあ、位置が揃わないのが嫌なのはなんとなく分かる。

ただ、「スタイル」という機能を知らずにWordを使っている人がほとんど(目測で9割以上)なので、

文書作成→文書全体を選択→フォントを「MS 明朝」に変更

という

最高にロックなイカしたやり方

をする人がほとんど。

っていうか、ドヤ顔で

最後に全体を選択して「MS 明朝」に変えたら楽やないか!

と推奨する人までいる(実話)。

そんなわけで、ウチで量産されるWord文書は、「標準」スタイルの英数字フォントの設定がデフォルトの「Century」のままなのに、英数字の箇所はことごとく「MS 明朝(またはゴシック)」という最高にクールなことになっているのである。

スタイルを変更するのはめんどくさい

書類なんかは、前年度のものを使い回すことが多いので、当然「標準スタイル」の英数字フォントがCenturyのままなのに、英数字のところが「MS 明朝」に無理矢理変えられているだけの文書を扱う機会が多い。っていうか、ほぼそんな感じ。

したがって、「標準」スタイルのフォント設定を変更するという作業が発生するのだが、正攻法でやると結構めんどくさい。

「標準」スタイルの英数字フォント設定を変更する手順
  1. 「ホーム」タブの「スタイル ギャラリー」で「標準」を右クリック
  2. 「変更」をクリック
  3. 「書式」ボタンをクリック
  4. 「フォント」をクリック
  5. 「フォント」タブの「英数字用のフォント」のドロップダウンリストから「(日本語用と同じフォント)」を選択
  6. [OK]をクリック
  7. [OK]をクリック

と、実に7段階もの作業が生ずるのである!

こういう単純作業はマクロ化するに限る。

Document.Styleオブジェクト

ちょいと調べてみると、「スタイル」そのものは、Documentオブジェクトの配下にあるStylesコレクションの一員で、Styles(Indexで取得できるということはすぐに分かった。

【参考】MSDN デベロッパー センター「Styles オブジェクト (Word)」

Styleオブジェクトのメンバについては、MSDN デベロッパー センター「Style Members (Word)」に掲載されているが、英語版しかないみたい。

「標準」スタイルのインデックス番号を割り出す

オブジェクト ブラウザーで、Styleオブジェクトのメンバを列挙してみる。

f:id:akashi_keirin:20180513072013j:plain

どうもNameLocalというやつがスタイルの日本語名を指すっぽい(なんでコイツだけ変なアイコンなんだろ?)。

MSDN デベロッパー センター「Style Members (Word)」での説明も、

Returns the name of a built-in style in the language of the user. Read/write
String.

となっている。「ユーザーの言語での組み込みスタイル名を返す」ぐらいか。

で、次のコードで「標準スタイル」のインデックス番号を割り出すことを試みた。

リスト1 標準モジュール
Public Sub test()
  Dim s As Style
  Dim cnt As Long
  cnt = 1
  For Each s In ThisDocument.Styles
    Debug.Print cnt & vbTab & s.NameLocal
    cnt = cnt + 1
  Next
End Sub

For EachStylesコレクションを巡回して、1から順に番号を付けてスタイル名をイミディエイトに表示するだけのコード。

別にFor Eachじゃなくても、普通のFor文でも書ける(For i = 1 To ThisDocument.Styles.Countにする)。

[F8]連打でステップ実行を繰り返すと、

f:id:akashi_keirin:20180513072022j:plain

発見!

ウチの環境では、「194」というのが「標準」スタイルのインデックス番号らしい。

Document.Styles(194)で「標準」スタイルオブジェクトにアクセスできるので、あとはオブジェクトの操作の仕方さえ分かったらマクロ化が可能になる。

akashi-keirin.hatenablog.com

akashi-keirin.hatenablog.com