ルビが施された部分のフォント情報を取得する(Word)
ルビが設定された部分のフォント情報を取得する
選択箇所のフォント情報を取得するときには、Selection.Font
オブジェクトにアクセスすればよい。たとえば、
Selection.Font.Name
とすれば、カーソル位置のフォント名が取得できる。
……はずだ。
ルビが設定されている場合の挙動
次の画像をご覧いただきたい。
「強敵」の直前にカーソルがある。「強敵」の部分は「MS ゴシック」。その他の部分は「MS 明朝」である。
このとき、フォント名表示窓の表示は、「MS 明朝」。
直前の部分のフォント名を表示しているようだ。
次。[Shift]+[→]で、「強敵」を選択状態にしてみる。
!
フォント名表示窓が空白に!!!!
この状態で、イミディエイト・ウインドウに
?Selection.Characters(1).Text
?Selection.Font.Name
?Selection.Font.Size
の三つを入力して実行してみると、それぞれ
もう、まったくわけのわからない結果が返る。
次に、[→]ボタンを押して、カーソルを「強敵」の直後に持って行く。
フォント名表示窓の表示は、
これは、やはり直前の部分のフォント名を表示しているらしい。
ルビが設定されている箇所のフォント情報を取得する
上記の挙動から、ルビの部分が選択されている状態で選択部分のフォント情報を得るには、
- 一旦カーソルを右に移動する
- フォント情報を取得する
- 選択状態に戻す
という操作が必要であると考えた。
ルビが施された親文字のフォント情報を取得する
リスト1
Private Sub getRubiedCharFontInfo() Dim currRange As Range '……(1)' Set currRange = Selection.Range Call Selection.MoveRight(wdCharacter, 1, wdMove) '……(2)' Debug.Print "フォント名:" & Selection.Font.Name '……(3)' Debug.Print "フォントサイズ:" & Selection.Font.Size Call currRange.Select '……(4)' End Sub
まず(1)の
Dim currRange As Range Set currRange = Selection.Range
で、選択範囲をRange
型の変数に突っ込んでおく。
んで、(2)の
Call Selection.MoveRight(wdCharacter, 1, wdMove)
でカーソルを1文字分だけ右に移動。これで、ルビを施した文字列の直後にカーソルが来る。
すかさず(3)の
Debug.Print "フォント名:" & Selection.Font.Name Debug.Print "フォントサイズ:" & Selection.Font.Size
でフォント情報を取得してイミディエイトに表示。
最後に(4)の
Call currRange.Select
で、(1)で保存しておいたRange
オブジェクトを選択する。
実行結果
イミディエイトの出力はバッチリ。
ドキュメント(笑)の方も、見かけ上は元どおり。
うむ!
おわりに
ただ、同じ選択範囲に異なるフォントがチャンポンになっていたら詰む……?