我在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