1

Тема: Макрос или автозамена, выделяющая даты курсивом

Имеется огромный сборник стихов. В конце каждого стихотворения на отдельной строчке - дата. Например: 16.10.2016. Как сделать, чтобы даты автоматически были выделены курсивом, а перед ними был вставлен знак табуляции в количестве одного?

Есть: 16.10.2016
Нужно:    16.10.2016

2

Re: Макрос или автозамена, выделяющая даты курсивом

Alnis пишет:

Есть: 16.10.2016
Нужно:    16.10.2016

Попробуйте макрос. У меня почему-то не получилось задать интервалы цифр в регулярном выражении ((

Sub SetItalicsInDates()
Dim findagain As Boolean
Selection.HomeKey Unit:=wdStory, Extend:=wdMove
findagain = True
While (findagain)
    Selection.Find.ClearFormatting
    With Selection.Find
        .Text = "[0-9]@.[0-9]@.????"
        .Wrap = wdFindStop
        .Format = False
        .Forward = True
        .MatchWildcards = True
    End With
    Selection.Find.Execute Replace:=wdReplaceNone
    findagain = Selection.Find.found
    If IsDate(Selection.Text) Then
        Selection.Font.Italic = True
        Selection.Collapse wdCollapseEnd
    End If
Wend
End Sub

3

Re: Макрос или автозамена, выделяющая даты курсивом

yshindin пишет:

Попробуйте макрос. У меня почему-то не получилось задать интервалы цифр в регулярном выражении ((

Причина моей ошибки регулярного выражения при поиске даты (см. мое предыдущее сообщение) оказалась в некорректном указании системного разделителя списка. Я использовал запятую, что неправильно (а правильно - точка с запятой для российского региона). Чтобы узнать значение разделителя для текущего региона, необходимо в VBA использовать выражение
     Application.International(wdListSeparator)
Например, в приведенном выше примере поиска, если бы было необходимо использовать поиск одной или двух цифр рядом, необходимо было использовать (для российского региона) не
     .Text = "[0-9]{1,2}"
(что выдавало ошибку регулярного выражения), а 
     .Text = "[0-9]{1;2}"
Но для того, чтобы код был независим от региональных установок, следует указывать
     .Text = "[0-9]{1" &  Application.International(wdListSeparator) & ",2}"

4

Re: Макрос или автозамена, выделяющая даты курсивом

yshindin пишет:

... для того, чтобы код был независим от региональных установок, следует указывать
     .Text = "[0-9]{1" &  Application.International(wdListSeparator) & ",2}"

Поправка: следует указывать

     .Text = "[0-9]{1" &  Application.International(wdListSeparator) & "2}"