我在Word文档的文本中发现任何格式为“2017年8月16日”的日期时遇到问题。使用ActiveDocument.Content.Find,我只能在第一页上找到结果。即使在第一页中,结果也不一致。以下是我的代码如下。使用VBA查找和替换Word文档中的日期
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循环。任何帮助,将不胜感激。
你不需要MonthNames中的数组。有一个内置的函数可以使用'monthname(10)' – jsotola
Word的'Find'和'Selection'以复杂的方式相互作用,参见例如。 [这里](http://gregmaxey.com/word_tip_pages/words_fickle_vba_find_property.html)。在For循环开始时,可以通过Selection.HomeKey单元= wdStory来将选择移回到文档顶部。 – xidgel
我不认为这与你的问题有关,但是你应该在文本上使用'格式',当它应该用于数字值时。我推荐一些类似'myDate = CDate(.Text)+ 7',然后是'.Text = Format(myDate,“mmmm d,yyyy”)' – xidgel