Range.PhoneticGuideメソッドを使いやすくする(Word)

[Range].PhoneticGuideメソッドを使いやすくする

[Range].PhoneticGuideメソッドはちょい使いにくいので、使いやすく改良。

改良したコード

[Range].PhoneticGuideメソッドは、何といっても引数Raiseが超絶わかりにくい。ゆえに、[Range].PhoneticGuideメソッドをラップして使いやすくした。

リスト1
Private Const MS_P_GOTHIC As String = "MS Pゴシック"
Private Const MS_GOTHIC As String = "MS ゴシック"
Private Const MS_MINGZHAO As String = "MS 明朝"
Private Const MS_P_MINGZHAO As String = "MS P明朝"

Private Const DEFAULT_RUBYSIZE As Long = 5

Private Sub callPhoneticGuide( _
              ByVal tgtRange As Range, _
              ByVal tgtRubyText As String, _
              ByVal tgtOffset As Long, _
     Optional ByVal tgtRubySize As Long = DEFAULT_RUBYSIZE, _
     Optional ByVal tgtFontName As String = MS_P_MINGZHAO, _
     Optional ByVal tgtAlignment As WdPhoneticGuideAlignmentType = _
                                      wdPhoneticGuideAlignmentOneTwoOne)
  '引数で指定されたRangeオブジェクトをSelectする'
  Call tgtRange.Select
  '一旦右にカーソルを移して親文字のフォントサイズを取得'
  Call Selection.MoveRight(wdCharacter, 1, wdMove)
  Dim parentFontSize As Single
  parentFontSize = Selection.Font.Size
  '親文字のフォントサイズと、引数tgtOffsetを元に、Raise値を取得'
  Dim tgtRaise As Long
  tgtRaise = Int(parentFontSize) - 1 + tgtOffset
  '再度親文字を選択状態にし、PhoneticGuideメソッドを実行'
  Call tgtRange.Select
  Call Selection.Range.PhoneticGuide( _
                         Text:=tgtRubyText, _
                         Alignment:=tgtAlignment, _
                         Raise:=tgtRaise, _
                         fontSize:=tgtRubySize, _
                         FontName:=tgtFontName)
  'ルビを施した文字列を選択状態にする'
  Call Selection.MoveRight(wdCharacter, 1, wdSelection)
End Sub

ちょっと引数祭り状態だが、そもそも[Range].PhoneticGuideメソッドが引数祭りメソッドなので許してほしい。

何といっても、ルビの親文字からの距離を指定できるようにしたことがポイント。

実は、めっちゃめんどくさいことをしている。

  '引数で指定されたRangeオブジェクトをSelectする'
  Call tgtRange.Select
  '一旦右にカーソルを移して親文字のフォントサイズを取得'
  Call Selection.MoveRight(wdCharacter, 1, wdMove)
  Dim parentFontSize As Single
  parentFontSize = Selection.Font.Size
  '親文字のフォントサイズと、引数tgtOffsetを元に、Raise値を取得'
  Dim tgtRaise As Long
  tgtRaise = Int(parentFontSize) - 1 + tgtOffset

コメントを読んでもらったら、いかにめんどくさいことをしているのか、わかっていただけると思う。

使ってみる

たとえば、

f:id:akashi_keirin:20200202003303j:plain

この状態で、

f:id:akashi_keirin:20200202003307j:plain

このように「本気」の部分を選択し、次のコードを実行。

スト2
Private Sub testPhoneticGuide()
  Call callPhoneticGuide(tgtRange:=Selection.Range, _
                         tgtRubyText:="マジ", _
                         tgtOffset:=1, _
                         tgtRubySize:=5)
End Sub

すると、

f:id:akashi_keirin:20200202003310j:plain

こうなる。

ルビの設定を確認すると、

f:id:akashi_keirin:20200202003313j:plain

バッチリ。

さらに、同じ箇所を選択した状態で次のコードを実行。

リスト3
Private Sub testPhoneticGuide()
  Call callPhoneticGuide(tgtRange:=Selection.Range, _
                         tgtText:="マジ", _
                         tgtOffset:=0, _
                         tgtRubySize:=5, _
                         tgtFontName:=MS_P_GOTHIC)
End Sub

今度は、オフセット値を0にし、ルビのフォントを「MS Pゴシック」にしてみる。

すると、

f:id:akashi_keirin:20200202003315j:plain

こうなる。

ルビの設定を確認すると、

f:id:akashi_keirin:20200202003318j:plain

やはりバッチリ。

おわりに

これで使いやすくなった。

基本、これでルビを設定し、細かなチューニングはフィールドコードをFindオブジェクトを用いて書き換えるようにすれば良い。