【发布时间】:2017-08-16 16:56:07
【问题描述】:
我在 Word 文档的文本中查找格式为“2017 年 8 月 16 日”的任何日期时遇到问题。使用 ActiveDocument.Content.Find,我只能在第一页上找到结果。即使在第一页,结果也不一致。下面是我的代码。
Dim myMonth(1 To 12) As String
myMonth(1) = "January"
myMonth(2) = "February"
myMonth(3) = "March"
myMonth(4) = "April"
myMonth(5) = "May"
myMonth(6) = "June"
myMonth(7) = "July"
myMonth(8) = "August"
myMonth(9) = "September"
myMonth(10) = "October"
myMonth(11) = "November"
myMonth(12) = "December"
'Find and replace dates in MMMM dd, yyyy format
For i = 12 To 1 Step -1
With ActiveDocument.Content
With .Find
.Text = "(" & myMonth(i) & ")" & " ([0-9]{1,2}), ([0-9]{4})"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindStop
.MatchWildcards = True
End With
While .Find.Execute
.Text = CDate(.Text) + 7
.Text = Format(.Text, "mmmm d, yyyy")
Wend
.Find.MatchWildcards = False
End With
Next i
此代码以所述格式将任何日期添加 7 天。我试过循环所有的故事,结果是一样的。我已经能够对格式为“08/16/2017”的日期执行此任务,因此问题似乎在于每个月的额外 For 循环。任何帮助将不胜感激。
【问题讨论】:
-
您不需要月份名称数组。有一个内置函数可以使用
monthname(10) -
Word 的
Find和Selection以复杂的方式交互,参见例如here。在 For 循环的开头使用Selection.HomeKey Unit:=wdStory将所选内容移回文档顶部可能会有所帮助。 -
我认为这与您的问题无关,但您在文本上使用
Format,而它应该用于数值。我会推荐类似myDate = CDate(.Text) + 7,然后是.Text = Format(myDate, "mmmm d, yyyy")