マクロでルビ振りをするときの注意(Word)
Word VBA のバグを発見したので、ここで盛大に晒しますw
[Range].PhoneticGuideメソッドでルビを振る
まず、次のようなドキュメント(笑)を用意する。

選択部分を見たらわかるように、フォントは「MS 明朝」。
んで、こいつに、次のリスト1を実行する。
リスト1
Private Sub TestPhoneticGuide()
Const MS_P_MINGZHAO As String = "MS P明朝"
Call Selection.Range.PhoneticGuide( _
Text:="とも", _
Alignment:=wdPhoneticGuideAlignmentOneTwoOne, _
Raise:=10, _
FontSize:=5, _
FontName:=MS_P_MINGZHAO)
End Sub
[Range].PhoneticGuideメソッドを用いて、「強敵」という親文字に、5ポイントのMS P明朝で「とも」とルビを振るコード。

こうなる。
で、「強敵」の部分を調べると、

このように、ちゃんと5ポイントのMS P明朝で「とも」とルビが振られていることがわかる。
ここで、一旦ドキュメント(笑)を閉じ、開き直す。
もう一度、「強敵」の部分を調べる。

何も変わっていない。当り前だけど。
ここで、フィールドコードを調べる。

EQ \* jc2 \* "Font:MS P明朝" \* hps10 \o\ad(\s\up 10(とも),強敵)
こうなっている。
「hps10」の部分がルビのフォントサイズを表す。実際のサイズ(5ポイント)の2倍の数値が記録されている。
マクロでルビのフォントサイズを変更する
このフィールドコードをマクロで書き換えてみる。
リスト2
Private Sub testReplaceFieldCode()
Dim tgtField As Field
With Selection.Fields(1)
.Code.Text = Replace(.Code.Text, "hps10", "hps9")
End With
End Sub
選択範囲のField.Codeプロパティの返り値(Rangeオブジェクト)のTextプロパティがフィールドコード文字列を表すので、その「hps10」を「hps9」に置換してやれば、フォントサイズは4.5ポイントに変わる。
リスト2を実行した後、「強敵」の部分を調べると、

ちゃんとフォントサイズが4.5ポイントになっている。

フィールドコードはこのとおり。ちゃんと「hps9」になっているのがわかる。
ドキュメント(笑)を開き直す
さて、先ほどのドキュメント(笑)を一旦閉じて開き直すと、どうなるか。

おわかりだろうか。
なんと、ルビのフォントが親文字と同じ「MS 明朝」に化けてしまうのである。
これは、結構深刻な問題ではなかろうか。
回避策
ちなみに、フォントサイズだけではなく、フォントの種類など、とにかくマクロでフィールドコードを書き換えると、同様のことが起こる。
今回は、親文字がMS 明朝、ルビがMS P明朝という非常に違いのわかりづらい(笑)例だったが、ゴシック系の親文字に明朝系のルビ、みたいなときは非常に困る。
今のところ回避策としては、
[Range].PhoneticGuideでルビを振る- [Alt]+[F9]でフィールドコードを表示する
- [Ctrl]+[H]で置換ダイアログを表示する
- 関係するフィールドコード文字列を置換する
ぐらいしか思いつかない。
今回の例だと、
[Alt]+[F9]でフィールドコードを表示し、

[Ctrl]+[H]で置換ダイアログの「検索する文字列」に「hps10」、「置換する文字列」に「hps9」を入力して[置換]ボタンをクリック。

完了。
「強敵」のところを調べると、

このとおり。
今度は、一旦閉じて開き直しても、

大丈夫。
おわりに
わけのわからんことが起こるなあ。