用条件合并字段替换代词的宏

Macro to Replace Pronouns with Conditional Merge Field

我需要一个用条件合并字段替换 his/her 或 he/she 的宏。感谢另一个网站,我能够用合并字段替换这些代词,而不是条件合并字段而不会使 MS Word 崩溃。下面是我使用的代码。

  Sub TestAddIf()

    Dim doc As Word.Document
    Dim mRng As Range
    Set doc = ActiveDocument
    Set mRng = ActiveDocument.Range
    With oRng.Find
      Do While .Execute(FindText:="he")
        doc.MailMerge.Fields.AddIf mRng, _
        MERGEFIELD:="""Client_Sex""", Comparison:=wdMergeIfEqual, CompareTo:="M", _
        truetext:="he", _
        falsetext:="she"
        mRng.Collapse wdCollapseEnd
        Loop
    End With
End Sub

尝试以下宏,它处理整个文档中的 'he'、'his'、'him' 和 'male'(删除 ',male' & ',如果您不想要的话,请使用女性术语)。

Sub Demo()
Application.ScreenUpdating = False
Dim Rng As Range, RngFld As Range, StrFnd As String, StrRep As String, StrCode As String, i As Long, j As Long
StrM = "he,his,him,male": StrF = "she,her,her,female"
With ActiveDocument
  For i = 0 To UBound(Split(StrM, ","))
    StrCode = "IFX= ""M"" """ & Split(StrM, ",")(i) & """ """ & Split(StrF, ",")(i) & """"
    j = Len(StrCode) + 4
    Set Rng = .Range(0, 0)
    .Fields.Add Range:=Rng, Type:=wdFieldEmpty, Text:=StrCode, PreserveFormatting:=False
    Rng.End = Rng.End + j
    .Fields.Add Range:=Rng.Characters(5), Type:=wdFieldEmpty, Text:="MERGEFIELD Client_Sex", PreserveFormatting:=False
    Rng.Cut
    With .Range.Find
      .ClearFormatting
      .Replacement.ClearFormatting
      .Forward = True
      .Wrap = wdFindContinue
      .MatchCase = False
      .MatchWholeWord = True
      .MatchWildcards = False
      .Text = Split(StrM, ",")(i)
      .Replacement.Text = "^c"
      .Execute Replace:=wdReplaceAll
    End With
  Next
End With
Application.ScreenUpdating = True
End Sub