ルビのサイズを変更するFunction(Word)
ルビのサイズを変えるFunction
前回
の続き。
ルビのサイズを変える
ルビのサイズを変えるには、
上記フィールドコード、
EQ \* jc2 \* "Font:MS 明朝" \* hps10 \o\ad(\s\up 10(ムーンサルト),月面宙返)
のうち、
\* hps10
の値を変える。
「hps」というのは、前回も参照した
ワードの理解シリーズ様によると、
フォントの半分のポイント数(hpsは、half point sizeのhps)
とのこと。
従って、hps10
なら、ルビのサイズは5ポイントだということだ。
コード
では、上記のことを踏まえてコーディング。
リスト1 標準モジュール
Private Const MAX_RUBY_SIZE As Single = 20 '……(1)' Private Function getChangedRubySizeFieldCodeText( _ ByVal targetFieldCodeText As String, _ ByVal targetSize As Single) As String Dim ret As String ret = targetFieldCodeText If targetSize > MAX_RUBY_SIZE Then GoTo Finalizer '……(2)' ret = getRepairedFieldCodeText(ret) '……(3)' Dim ar As Variant ar = Split(targetFieldCodeText, "\") '……(4)' '" ar(3) = "* hps" & targetSize * 2 ret = getAssembledFieldCodeText(ar) '……(5)' Finalizer: getChangedRubySizeFieldCodeText = 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から呼び出すことになる自作Functionは再掲した。
(1)の
Private Const MAX_RUBY_SIZE As Single = 20
は、ルビの最大サイズをとりあえず定数で設定。大きめにして20
としたが、この辺はお好みで。
(2)の
If targetSize > MAX_RUBY_SIZE Then GoTo Finalizer
はガード節。引数で受け取ったサイズが、想定した最大サイズ(MAX_RUBY_SIZE
の値)を超えていたら、Finalizer
ラベルまで飛んで、即リターンする。
(3)の
ret = getRepairedFieldCodeText(ret)
では、自作のgetRepairedFieldCodeText
で引数で受け取ったフィールドコードをチェック。
前回も書いたとおり、手動で「中央揃え」にすると、フィールドコードの一部が省略されてしまうので、もし省略されていたら、このFunctionで省略のない形に改める。
次に(4)からの2行
ar = Split(targetFieldCodeText, "\") '" ar(3) = "* hps" & targetSize * 2
で、一旦フィールドコードを部分にバラし、ルビのフォントサイズにかかわる部分(インデックス番号3
の要素)を書き換える。
あとは、(5)の
ret = getAssembledFieldCodeText(ar)
で自作FunctionのgetAssembledFieldCodeText
を用いてフィールドコード文字列に組み立てて返り値用の変数ret
にぶち込む。
使ってみる
次のコードで実験。
リスト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 = getChangedRubySizeFieldCodeText(.Code.Text, 9#) End If End With Next End Sub
選択箇所のルビのフォントサイズを9
に変えるコード。
ちなみに、現行のルビのフォントサイズは5
。
このように、ルビが振られた部分を選択して実行すると、
このとおり。
フィールドコードを表示すると、
hps
の値が18
になっているので、ルビのフォントサイズは9
ということだ。
おわりに
文書の選択箇所のルビのフォントサイズを一括して変換するとか、そういう用途に使えそうです。