Wordの「スタイル」をVBAで操作する(Word)
Wordの「スタイル」をVBAで操作する
ウチの職場には、書類の英数字は等幅という謎ルールがある。
まあ、位置が揃わないのが嫌なのはなんとなく分かる。
ただ、「スタイル」という機能を知らずにWordを使っている人がほとんど(目測で9割以上)なので、
文書作成→文書全体を選択→フォントを「MS 明朝」に変更
という
最高にロックなイカしたやり方
をする人がほとんど。
っていうか、ドヤ顔で
最後に全体を選択して「MS 明朝」に変えたら楽やないか!
と推奨する人までいる(実話)。
そんなわけで、ウチで量産されるWord文書は、「標準」スタイルの英数字フォントの設定がデフォルトの「Century」のままなのに、英数字の箇所はことごとく「MS 明朝(またはゴシック)」という最高にクールなことになっているのである。
スタイルを変更するのはめんどくさい
書類なんかは、前年度のものを使い回すことが多いので、当然「標準スタイル」の英数字フォントがCenturyのままなのに、英数字のところが「MS 明朝」に無理矢理変えられているだけの文書を扱う機会が多い。っていうか、ほぼそんな感じ。
したがって、「標準」スタイルのフォント設定を変更するという作業が発生するのだが、正攻法でやると結構めんどくさい。
「標準」スタイルの英数字フォント設定を変更する手順
- 「ホーム」タブの「スタイル ギャラリー」で「標準」を右クリック
- 「変更」をクリック
- 「書式」ボタンをクリック
- 「フォント」をクリック
- 「フォント」タブの「英数字用のフォント」のドロップダウンリストから「(日本語用と同じフォント)」を選択
- [OK]をクリック
- [OK]をクリック
と、実に7段階もの作業が生ずるのである!
こういう単純作業はマクロ化するに限る。
Document.Styleオブジェクト
ちょいと調べてみると、「スタイル」そのものは、Document
オブジェクトの配下にあるStyles
コレクションの一員で、Styles(Index)
で取得できるということはすぐに分かった。
【参考】MSDN デベロッパー センター「Styles オブジェクト (Word)」
Style
オブジェクトのメンバについては、MSDN デベロッパー センター「Style Members (Word)」に掲載されているが、英語版しかないみたい。
「標準」スタイルのインデックス番号を割り出す
オブジェクト ブラウザーで、Styleオブジェクトのメンバを列挙してみる。
どうも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 Each
でStyles
コレクションを巡回して、1から順に番号を付けてスタイル名をイミディエイトに表示するだけのコード。
別にFor Each
じゃなくても、普通のFor
文でも書ける(For i = 1 To ThisDocument.Styles.Count
にする)。
[F8]連打でステップ実行を繰り返すと、
発見!
ウチの環境では、「194」というのが「標準」スタイルのインデックス番号らしい。
Document.Styles(194)
で「標準」スタイルオブジェクトにアクセスできるので、あとはオブジェクトの操作の仕方さえ分かったらマクロ化が可能になる。