2

Excel セルからデータを選択し、Word 文書内の特定のテキストを置き換える次のコードがあります (この質問のために、Excel セルはプレーン テキスト文字列に置き換えられています)。

データ ": gos to " は定数です。データ "aaa bbb" は、定数である " of " に到達するまでは何でもかまいません。次に、「 of 」、「ccc ddd eee」の後のデータは、「 - 」に達するまでは何でもかまいません。これも定数です。

「aaa bbb」データをBOLD & UPPER CASE にして、「ccc ddd eee」データをITALICSにすることはできますか?

": ccc ddd eeeのAAA BBBに移動します- "

Selection.HomeKey Unit:=wdStory
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
    .Text = "MOTMDIV1"
    .Replacement.Text = ": goes to aaa bbb of ccc ddd eee - "
    .Forward = True
    .Wrap = wdFindContinue
    .Format = False
    .MatchCase = True
    .MatchWholeWord = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
End With

Selection.Find.Execute Replace:=wdReplaceAll
4

1 に答える 1

2

検索と置換を単一の検索と置換からすべてに変更すると、置換されたテキストが強調表示され、置換された範囲のプロパティを変更できるようになります。これを強調するためにコードを変更しました:

Sub ReplaceAndFormat()
   Dim sConst1 As String, sConst2 As String, sReplaceMent As String
   Dim rRange As Range, rFormat As Range

    'Set your constants.  This is where you can read in from Excel or whereever
   sConst1 = "aaa bbb"
    sConst2 = "ccc ddd eee"

    'Build the replacement string
    sReplaceMent = ": goes to " & sConst1 & " of " & sConst2 & " - "

    'Your replacement code
    Selection.HomeKey Unit:=wdStory
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
       .Text = "MOTMDIV1"
        .Replacement.Text = sReplaceMent
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = True
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
        .Execute Replace:=wdReplaceOne

       'If we replace one by one Word will select the range after it finds it
        If .Found Then
            'After you've done the replacement, set it to a range so you can format
            Set rRange = Selection.Range

           'We know the length of all the strings so we can set the range of the "aaa bbb" etc etc 
           Set rFormat = ActiveDocument.Range(rRange.Start + 10, rRange.Start + 10 + VBA.Len(sConst1))
           'Set the formats for the first part
           rFormat.Font.Bold = True
           rFormat.Font.AllCaps = True

           'Repeat for the second part
           Set rFormat = ActiveDocument.Range(rRange.Start + 14 + VBA.Len(sConst1), rRange.Start + 14 + VBA.Len(sConst1) + VBA.Len(sConst2))
           rFormat.Font.Italic = True
       End If
   End With
End Sub

注: 検索テキストのすべてのインスタンスを検索して置換する場合は、次のようにドキュメントをループする必要があります:検索結果が見つからなくなるまで Microsoft Word VBA を繰り返す

于 2013-02-08T21:21:37.100 に答える