使用跟踪功能添加前导零的宏 - Microsoft VBA

时间:2016-03-22 22:23:30

标签: vba ms-word word-vba

以下代码在没有跟踪更改的情况下有效。 “跟踪更改”必须进行哪些更改才能在宏运行时触发,并且脚本不会在第一个结果上无休止地循环?

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

1 个答案:

答案 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