以下代码在没有跟踪更改的情况下有效。 “跟踪更改”必须进行哪些更改才能在宏运行时触发,并且脚本不会在第一个结果上无休止地循环?
Sub ConvertDateFormat()
With ActiveDocument.Range
With .Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "([0-9]{1,2})[/]([0-9]{1,2})[/]([0-9]{4})"
.Format = True
.Wrap = wdFindStop
.Forward = True
.MatchWildcards = True
.Execute
End With
Do While .Find.Found
If IsDate(.Text) Then
.Text = Format(.Text, "dd/mm/yyyy")
End If
.Collapse wdCollapseEnd
.Find.Execute
Loop
End With
End Sub
以上解决方案来自: Working with Microsoft Word VBA - macro to add leading zeroes to date
答案 0 :(得分:0)
您需要提供整洁的细节。如果我理解正确形成你的问题,
“脚本不会在第一个结果上无休止地循环”,
我认为在跟踪更改开启时,单词查找和替换会替换整个日期,因此当您在.find .execute
处发生攻击时,会再次出现新的替换日期,因此它会无休止地循环。您需要再添加一个.find.execute来跳过插入的新日期。我认为这将解决问题。
Sub TestTrackOn()
With ActiveDocument.Range
With .Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "([0-9]{1,2})[/]([0-9]{1,2})[/]([0-9]{4})"
.Format = True
.Wrap = wdFindStop
.Forward = True
.MatchWildcards = True
.Execute
End With
Do While .Find.Found
If IsDate(.Text) Then
.Text = Format(.Text, "dd/mm/yyyy")
End If
.Collapse wdCollapseEnd
.Find.Execute
.Find.Execute
Loop
End With
End Sub