Работа с Microsoft Word VBA - макрос для добавления ведущих нулей к дате

Я пытаюсь сделать макрос в Microsoft Word 2013, используя VBA, чтобы добавить начальные нули к датам (в основном даты и месяцы)

Итак, с 06.04.2004 по 04.06.2004 и с 11.05.2005 по 05.11.2005

Я попытался использовать здесь вариант ответа, но он бесконечно зацикливается на первом свидании: http://answers.microsoft.com/en-us/office/forum/office_2010-word/macro-to-convert-date-format-in-a-document/20539af7-a961-499f-9e85-22af8f4c3c58?auth=1

Sub ConvertDateFormat()
Dim FoundOne As Boolean
Selection.HomeKey Unit:=wdStory,           Extend:=wdMove
FoundOne = True ' loop at least once
Do While FoundOne ' loop until no     date is found
    With Selection.Find
        .ClearFormatting
        .Replacement.ClearFormatting
        .Text = "([0-9]{1,2})[/]([0-9]{1,2})[/]([0-9]{4})"
        .Format = True
        .Forward = True
        .MatchWildcards = True
    End With
    Selection.Find.Execute     Replace:=wdReplaceNone
    ' check that the find is a date
If IsDate(Selection.Text) Then
        Selection.Text =      Format(Selection.Text, "dd/mm/yyyy")
        Selection.Collapse     wdCollapseEnd
    Else ' not a date - end loop
        FoundOne = False
    End If
Loop
End Sub

person Vincent Duong    schedule 21.03.2016    source источник


Ответы (1)


Попробуйте это и узнайте, что я изменил.

Искусство поиска и замены MS-слов заключается в диапазоне, коллапсе и циклах (for и do while)

Прекрасно работает на Win-7pro, 64, office 2010, 32

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
person Rahul    schedule 21.03.2016
comment
Привет, Рахул! Макрос работает, если отслеживание изменений отключено. Если мне нужно решение с включенным отслеживанием изменений без зацикливания первого результата поиска - как мне это сделать? - person Vincent Duong; 22.03.2016