搜索月份/日期的word文档,并替换为不同的月份/日期

时间:2018-04-12 17:12:18

标签: vba word-vba

在我的新工作中,我正在发送带有个性化日期信件的发票。每个月我都会为每个客户提供一个word文档,并将日期从我们上次发送发票的日期更新到我们发送当前发票的日期。我基本上都不知道编码,但我已经设法得到一些东西,将搜索一个月,并用新月替换它。我通过谷歌搜索并拼凑它来做到这一点。我不知道它的好坏与否,但它确实有效。

Sub Test()

With Selection.Find
    .Text = "April"
    .Replacement.Text = "May"
    .Forward = True
    .Wrap = wdFindContinue
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll

End Sub

我的问题是,有没有办法搜索像“月DD,YYYY”这样的日期,并将其替换为我选择的日期?此外,它不一定与之前的日期相同。

提前致谢

1 个答案:

答案 0 :(得分:0)

实际上,如果你不想使用它,你甚至不需要VBA-- wildcard search会这样做。

  1. 打开“替换”对话框,单击“更多”(如有必要),然后选中“使用通配符”。
  2. 在“查找内容”框中,添加MMMM[ ^s][0-9]{1,2},[ ^s][0-9]{4,4},但使用您想要的实际月份代替MMMM。它区分大小写。
  3. 在“替换为”框中,输入新日期。
  4. 点击全部替换。
  5. 宾果!例如,如果MMMM = March,则3月份的任何日期都将替换为您指定的新日期。

    解释

    • [ ^s]是一个空间或不间断的空间
    • [0-9]{1,2}是一个或两个({1,2})个数字([0-9])。
    • 同样,[0-9]{4,4}正好是四位数。

    VBA

    为了完整性,这里是:

    Option Explicit
    Option Base 0
    
    Sub Test()
    
        With Selection.Find
            .Text = "March[ ^s][0-9]{1,2},[ ^s][0-9]{4,4}"      ' ###
            .Replacement.Text = "April 1, 2018"
            .Forward = True
            .Wrap = wdFindContinue
            .Format = False
            '.MatchCase = False         ' ### Not relevant when using wildcards
            .MatchWholeWord = False
            .MatchWildcards = True                              ' ###
            .MatchSoundsLike = False
            .MatchAllWordForms = False
        End With
        Selection.Find.Execute Replace:=wdReplaceAll
    
    End Sub
    

    PS-恭喜您开始使用VBA!你的代码看起来很好 - 它非常接近你从宏录制器获得的相同操作,但更清晰。您不需要的两个提示:) - 始终在每个模块的顶部使用Option Explicit,并使用特定类型Dim变量。