ルビが施された部分のフォント情報を取得する(Word)

ルビが設定された部分のフォント情報を取得する

選択箇所のフォント情報を取得するときには、Selection.Fontオブジェクトにアクセスすればよい。たとえば、

Selection.Font.Name

とすれば、カーソル位置のフォント名が取得できる。

……はずだ。

ルビが設定されている場合の挙動

次の画像をご覧いただきたい。

f:id:akashi_keirin:20200127081511j:plain

「強敵」の直前にカーソルがある。「強敵」の部分は「MS ゴシック」。その他の部分は「MS 明朝」である。

このとき、フォント名表示窓の表示は、「MS 明朝」。

直前の部分のフォント名を表示しているようだ。

次。[Shift]+[→]で、「強敵」を選択状態にしてみる。

f:id:akashi_keirin:20200127081513j:plain

フォント名表示窓が空白に!!!!

この状態で、イミディエイト・ウインドウに

?Selection.Characters(1).Text
?Selection.Font.Name
?Selection.Font.Size

の三つを入力して実行してみると、それぞれ

f:id:akashi_keirin:20200127081516j:plain

f:id:akashi_keirin:20200127081521j:plain

f:id:akashi_keirin:20200127081523j:plain

もう、まったくわけのわからない結果が返る。

次に、[→]ボタンを押して、カーソルを「強敵」の直後に持って行く。

フォント名表示窓の表示は、

f:id:akashi_keirin:20200127081527j:plain

これは、やはり直前の部分のフォント名を表示しているらしい。

ルビが設定されている箇所のフォント情報を取得する

上記の挙動から、ルビの部分が選択されている状態で選択部分のフォント情報を得るには、

  • 一旦カーソルを右に移動する
  • フォント情報を取得する
  • 選択状態に戻す

という操作が必要であると考えた。

ルビが施された親文字のフォント情報を取得する

リスト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オブジェクトを選択する。

実行結果

f:id:akashi_keirin:20200127081532j:plain

イミディエイトの出力はバッチリ。

f:id:akashi_keirin:20200127081529j:plain

ドキュメント(笑)の方も、見かけ上は元どおり。

うむ!

おわりに

ただ、同じ選択範囲に異なるフォントがチャンポンになっていたら詰む……?