【wordマクロ・word VBA】太字のルビを付ける

太字のルビを付けるword用マクロを作るのに、検索してもなかなかヒットしなかったのでメモしておきます。

マクロの内容:選択した文字の上に「*」を付けます。
       「*」は文字サイズ6ptの太字です。

ポイントは、「ルビに太字を反映するために、フィールドコード内の「* jc2」の部分を削除する」ことです。
この部分を消す=中央揃え(jc0)も使えないため、文字位置の調整が必要なのが難点……


Sub 選択した文字に太字のルビを打つ()
  
    Dim selectRange As Range
    Set selectRange = Selection.Range
    
    Dim targetField As Field
    
    Dim codetextBF As String
    Dim codetextAF As String
    Dim codeArray  As Variant
    Dim cotetextCnt As Integer
    Dim iRubyCount As Integer
    Dim rubytext As String
    Dim i As Integer: i = 0
    Dim j As Integer
    Dim selectTxt As String
    Dim codeLen As Integer
        
    Dim startPosition As Integer
    Dim endPosition As Integer
        
    startPosition = selectRange.Start
    selectTxt = selectRange.Text
        
    '選択された文字の上側に「・」を打つ
    Selection.SetRange Start:=startPosition, End:=startPosition + 1
    For i = 0 To Len(selectTxt) - 1
        Selection.Range.PhoneticGuide Text:="・" & " ", Alignment:= _
            wdPhoneticGuideAlignmentOneTwoOne, Raise:=8, FontSize:=6
            
        Selection.Range.Characters.Last.Select
        For Each targetField In Selection.Fields
    
            'フィールドコード内の「\* jc2」の部分を削除しないと太字が反映されないので、ここで削除
            With targetField
                codetextBF = .Code.Text
                codeArray = Split(codetextBF, "\")
                codeArray(1) = ""
                codeArray(5) = "ar("
                codetextAF = ""
                codetextAF = codeArray(0) & codeArray(1) & "\"
                For j = 2 To UBound(codeArray)
                  codetextAF = codetextAF & codeArray(j) & "\"
                Next
                codetextAF = Left(codetextAF, Len(codetextAF) - 1)
                cotetextCnt = Len(codetextAF)
                .Code.Text = codetextAF
            End With
    
            'ルビの中の「、」を検索して太字&文字サイズを6に変更
            With Selection.Find
                .Forward = True
                .Wrap = wdFindStop
                .Text = ""
                .Execute
            End With
            With Selection
                .Font.Bold = True
                .Font.Size = 6
            End With
    
        Next
        
        Call Selection.MoveRight(wdCharacter, 1, wdSelection)
        Selection.Characters.Last.Next.Select
            
    Next i
    
    Set selectRange = Selection.Range
    endPosition = selectRange.End - 1
    
    Selection.SetRange Start:=startPosition, End:=endPosition
                   
    Set selectRange = Nothing
    Set targetField = Nothing
     
End Sub

いいなと思ったら応援しよう!