【问题标题】:Apply find/replace routine to entire document将查找/替换例程应用于整个文档
【发布时间】:2022-12-21 14:55:24
【问题描述】:

我有一个宏来确保大数字在正确的位置有逗号。

我插入逗号的例程有效,但还包括日期、街道编号等(例如,15 January 2,022 和 1,234 Smith Street)。

我正在尝试更正街道地址,但我的循环有问题。它只是查找/修复其中带有逗号的街道号码的第一个实例。

请注意,代码 sn-p 包含我在故障排除期间尝试过的几个注释命令。

'remove commas from street addresses
Set oRange = ActiveDocument.Range
With oRange.Find
    'Set the search conditions
    .ClearFormatting
    .Text = "(<[0-9]{1,2})(,)([0-9]{3})"
    .Forward = True
    .Wrap = wdFindContinue
    .Format = False
    .MatchWildcards = True
    .Execute
    
    'If .Found Then
    Do While .Found
        oRange.Select 'for debugging purposes
        If (InStr(1, "NorthEastWestSouth", Trim(oRange.Words(3).Next(wdWord, 1)), 0) <> 0 And Len(Trim(oRange.Words(3).Next(wdWord, 1))) > 1) Or _
            (InStr(1, "StreetAvenueRoadRdBoulevardBlvdPikeCircleHighwayHwyCourtCtLaneWayParkwayAlleyBypassEsplanadeFreewayJunctionRouteRteTraceTrailTurnpikeVille", _
                Trim(oRange.Words(3).Next(wdWord, 2)), 0) <> 0 And Len(Trim(oRange.Words(3).Next(wdWord, 2))) > 1) Or _
            (InStr(1, "StreetAvenueRoadRdBoulevardBlvdPikeCircleHighwayHwyCourtCtLaneWayParkwayAlleyBypassEsplanadeFreewayJunctionRouteRteTraceTrailTurnpikeVille", _
                Trim(oRange.Words(3).Next(wdWord, 3)), 0) <> 0 And Len(Trim(oRange.Words(3).Next(wdWord, 3))) > 1) Or _
            InStr(1, "N.E.W.S.", Trim(oRange.Words(3).Next(wdWord, 1) & Trim(oRange.Words(3).Next(wdWord, 2))), 0) <> 0 Then
               .Replacement.Text = "\1\3"
               .Execute Replace:=wdReplaceAll
               'oRange.Text = VBA.Replace(oRange.Text, ",", "")
        End If
        '.Execute
    'End If
    Loop 'continue finding
End With

【问题讨论】:

    标签: vba ms-word find-replace


    【解决方案1】:

    尝试:

    Sub Demo()
    Application.ScreenUpdating = False
    Dim StrFnd As String, i As Long
    StrFnd = "Alley|Avenue|Av|Boulevard|Blvd|Bypass|Circuit|Crct|Circle|Crcl|Court|Ct|Esplanade|Esp|Freeway|Fwy|" & _
        "Junction|Jnc|Highway|Hwy|Lane|Ln|Way|Parkway|Pike|Road|Rd|Street|St|Route|Rt|Trace|Trail|Turnpike|Ville"
    With ActiveDocument.Range.Find
      .ClearFormatting
      .Replacement.ClearFormatting
      .Forward = True
      .Wrap = wdFindContinue
      .Format = False
      .MatchWildcards = True
      'Process dates
      .Text = "([JFMASOND][anuryebchpilgstmov]{2,8} [12]),([0-9]{3})>"
      .Replacement.Text = ""
      .Execute Replace:=wdReplaceAll
      'Process addresses
      For i = 0 To UBound(Split(StrFnd, "|"))
        .Text = "([0-9]),([0-9]{3} <[A-Z][a-z]@> " & Split(StrFnd, "|")(i) & ")"
        .Execute Replace:=wdReplaceAll
        .Text = "([0-9]),([0-9]{3} [NSEW]. <[A-Z][a-z]@> " & Split(StrFnd, "|")(i) & ")"
        .Execute Replace:=wdReplaceAll
        .Text = "([0-9]),([0-9]{3} <[A-Za-z]@> <[A-Z][a-z]@> " & Split(StrFnd, "|")(i) & ")"
        .Execute Replace:=wdReplaceAll
        .Text = "([0-9]),([0-9]{3} [NSEW]. <[A-Za-z]@> <[A-Z][a-z]@> " & Split(StrFnd, "|")(i) & ")"
        .Execute Replace:=wdReplaceAll
      Next
    End With
    Application.ScreenUpdating = True
    End Sub
    

    不确定您要通过“NorthEastWestSouth”和“N.E.W.S.”实现什么目标

    【讨论】:

    • 非常优雅的 macropod,谢谢你,感谢你的时间。 NorthEastWestSouth 和 N.E.W.S.行是为了解决如下所示的情况。看起来我可以通过添加另一个词来处理这些问题? .Text = "([0-9]),([0-9]{3} <[A-Za-z]@> <[A-Z][a-z]@> <[A-Z][a-z]@> " & Split(StrFnd, "|")(i) & ")" 1,234 E. Van Dyke Avenue 3,095 N. Maxwell Street
    • 查看更新的答案。
    猜你喜欢
    • 2012-11-02
    • 1970-01-01
    • 1970-01-01
    • 2018-12-26
    • 1970-01-01
    • 1970-01-01
    • 2019-10-29
    • 2011-12-08
    • 1970-01-01
    相关资源
    最近更新 更多