ルビのフォントの種類を変更するFunction(Word)
ルビのフォントの種類を変えるFucntion
前々回
前回
のつづき。
今度は、ルビのフォントの種類を変える。
上記フィールドコード、
EQ \* jc2 \* "Font:MS 明朝" \* hps10 \o\ad(\s\up 10(ムーンサルト),月面宙返)
のうち、
* "Font:MS 明朝"
のを変えればよいというのは一瞬でわかるだろう。。
コード
リスト1 標準モジュール
Private Const STANDARD_RUBY_FONT As String = "MS 明朝" Private Function getChangedRubyFontNameFieldCodeText( _ ByVal targetFieldCodeText As String, _ Optional ByVal targetFontName As String = STANDARD_RUBY_FONT) As String Dim ret As String ret = targetFieldCodeText ret = getRepairedFieldCodeText(ret) '……(1)' Dim ar As Variant ar = Split(ret, "\") '" '……(2)' ar(2) = "* " & """Font:" & targetFontName & """ " ret = getAssembledFieldCodeText(ar) '……(3)' Finalizer: getChangedRubyFontNameFieldCodeText = ret End Function '【再掲】///SplitでバラしたFieldCodeを元通りにする' Private Function getAssembledFieldCodeText( _ ByRef splitFieldCode As Variant) As String Dim i As Long Dim ret As String For i = LBound(splitFieldCode) To UBound(splitFieldCode) ret = ret & splitFieldCode(i) & "\" '" Next ret = Left(ret, Len(ret) - 1) getAssembledFieldCodeText = ret End Function '【再掲】///手動で「中央揃え」にしたときのスイッチ省略への対応' Private Function getRepairedFieldCodeText( _ ByVal targetFieldCodeText) As String Dim ret As String ret = targetFieldCodeText Dim ar As Variant ar = Split(ret, "\") '" 'インデックスの最大値が「7」だったら、省略されていない。' If UBound(ar) = 7 Then GoTo Finalizer '省略を補う処理' ReDim Preserve ar(7) ar(7) = ar(6) ar(6) = ar(5) ar(5) = "ac(" ar(4) = "o" '手動で「中央揃え」にした後だと、 ar(4) の値が"o("になるときがある。' ret = getAssembledFieldCodeText(ar) Finalizer: getRepairedFieldCodeText = ret End Function
例によって、メインのFunctionから呼び出すことになる自作Fucntionについては再掲しておいた。
(1)の
ret = getRepairedFieldCodeText(ret)
で一旦フィールドコード文字列をチェック。手動で中央揃えしたときに一部省略されてしまう現象への対応。(今回の場合は実は必要ないんですが。)
(2)からの2行
ar = Split(ret, "\") '" ar(2) = "* " & """Font:" & targetFontName & """ "
で、フィールドコード文字列のうち、フォント名の指定にかかわる部分を書き換える。
2行目の
"""Font:" & targetFontName & """"
の部分で、なぜ"
(ダブルクォーテーション)がずらずらと並べてあるのかよくわからない方は、
コチラをどうぞ。
あとは、(3)の
ret = getAssembledFieldCodeText(ar)
で、自作FunctiongetAssembledFieldCodeText
を用いてフィールドコード文字列を組み立て直してreturn。
使ってみる
次のコードで実験。
リスト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 = getChangedRubyFontNameFieldCodeText(.Code.Text, "MS ゴシック") End If End With Next End Sub
フォント名に「MS ゴシック」を指定する。
この状態で実行すると、
このとおり。フォントの種類が「MS ゴシック」になった。
フィールドコードはこのとおり。
おわりに
これで、ルビまわりのたいていのことは一括処理できる。