ルビのフォントの種類を変更するFunction(Word)

ルビのフォントの種類を変えるFucntion

前々回

akashi-keirin.hatenablog.com

前回

akashi-keirin.hatenablog.com

のつづき。

今度は、ルビのフォントの種類を変える。

f:id:akashi_keirin:20190202093450j:plain

上記フィールドコード、

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 & """"

の部分で、なぜ"(ダブルクォーテーション)がずらずらと並べてあるのかよくわからない方は、

akashi-keirin.hatenablog.com

コチラをどうぞ。

あとは、(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 ゴシック」を指定する。

f:id:akashi_keirin:20190202093453j:plain

この状態で実行すると、

f:id:akashi_keirin:20190202093456j:plain

このとおり。フォントの種類が「MS ゴシック」になった。

f:id:akashi_keirin:20190202093501j:plain

フィールドコードはこのとおり。

おわりに

これで、ルビまわりのたいていのことは一括処理できる。

参考

akashi-keirin.hatenablog.com

akashi-keirin.hatenablog.com

akashi-keirin.hatenablog.com

akashi-keirin.hatenablog.com