ルビと親文字の距離を調整するFucntion
ルビと親文字の距離を司るのは、
EQ \* jc4 \* "Font:MS 明朝" \* hps10 \o\ar(\s\up 10(ムーンサルト),月面宙返)
の中の
\s\up 10
の部分。
たとえば、

この状態のときのルビの設定は、

このとおり。
このときのフィールドコードが
EQ \* jc4 \* "Font:MS 明朝" \* hps10 \o\ar(\s\up 10(ムーンサルト),月面宙返)
んで、「オフセット」の値を

このように1増やして2にすると、フィールドコードは
EQ \* jc4 \* "Font:MS 明朝" \* hps10 \o\ar(\s\up 11(ムーンサルト),月面宙返)
になる。
いまいち仕組みがよくわからないが、とにかく\s\up 11のところの数字を増減させれば、ルビと親文字の位置関係を調整することができる。
コード
リスト1 標準モジュール
Private Function getShiftedOffsetSizeRubyFieldCodeText( _
ByVal targetFieldCodeText As String, _
ByVal shiftSize As Long) As String
Dim ret As String
ret = targetFieldCodeText
ret = getRepairedFieldCodeText(ret) '……(1)'
Dim ar As Variant
ar = Split(ret, "\") '"
Dim tmp As String
tmp = Split(ar(7))(1) '……(2)'
tmp = Split(tmp, "(")(0)
tmp = Replace(ar(7), tmp, CStr(CLng(tmp) + shiftSize))
ar(7) = tmp
ret = getAssembledFieldCodeText(ar) '……(3)'
getShiftedOffsetSizeRubyFieldCodeText = ret
End Function
(1)の
ret = getRepairedFieldCodeText(ret)
は、このシリーズではすでにおなじみの自作FunctiongetRepairedFieldCodeText(【参考】)を用いて、引数で受け取ったフィールドコード文字列を必要に応じて整形。
今回の目玉は、(2)からの3行
tmp = Split(ar(7))(1)
tmp = Split(tmp, "(")(0)
tmp = Replace(ar(7), tmp, CStr(CLng(tmp) + shiftSize))
ここがちょっとややこしい。
先に
ar = Split(ret, "\") '"
としてあるので、たとえばretに入っているフィールドコード文字列が、先に紹介した
EQ \* jc4 \* "Font:MS 明朝" \* hps10 \o\ar(\s\up 10(ムーンサルト),月面宙返)
である場合、ar(7)の値は、
up 10(ムーンサルト),月面宙返)
になる。
たとえば、引数shiftSizeが1だったとしたら、up 10(ムーンサルト),月面宙返)の「10」を「11」に変えたいわけなのだ。
そのために、まず、変数tmpを用意して、そこに
Split(ar(7))(1)
の値を入れる。
第2引数を省略してSplit関数を用いると、半角スペースが区切り文字になるので、インデックス番号1の要素は10(ムーンサルト),月面宙返)になるはず。
そこで、一旦こいつをtmpにぶち込んでおいて、さらに
tmp = Split(tmp, "(")(0)
を実行する。今度は、「(」を区切り文字にしてSplit関数を用いる。
できた配列のインデックス番号0の要素は、先頭の数字(今回の例だと10)になるはず。
これで、tmpには、現在の数値が入っているので、あとは、
tmp = Replace(ar(7), tmp, CStr(CLng(tmp) + shiftSize))
で、Replace関数を用いて、現在のtmpをtmpにshiftSizeを加えた数値(を文字列にキャストしたもの)で置き換える。
めんどくせーなw
最後に、これまたおなじみの自作FunctiongetAssembledFieldCodeText(【参考】)でフィールドコード文字列を組み立て直してreturn。
使ってみる

この状態(「オフセット」値は「1」)で、次のコードを実行してみる。
リスト2 標準モジュール
Public Sub test01()
Dim targetField As Field
For Each targetField In Selection.Fields
With targetField
Dim str As String
If .Type = wdFieldFormula And _
(InStr(1, .Code.Text, "\s\up") > 0 Or _
InStr(1, .Code.Text, "\s\do") > 0) Then
.Code.Text = getShiftedOffsetSizeRubyFieldCodeText(.Code.Text, 1)
End If
End With
Next
End Sub
オフセット値を1プラスするコード。
実行すると、

こうなる。ちょっとわかりづらいけれど、ルビの設定を確認すると、

ちゃんと「オフセット値」が「2」になっている。
おわりに
実は、フィールドコードの「\s\up 11」の「\up」の部分を「\do」に変えて、数字をマイナスにすると、うまくやれば下付のルビにもできたりするのだが、数字の調整のしかたがよくわからない。
このあたりは今後の課題。フィールドコード自体の理解を深める必要があるのかも。