Введите слово VBA, чтобы найти строку, начинающуюся с «Date:», и скопируйте строку в начало соответствующей страницы. - PullRequest
0 голосов
/ 04 октября 2018

Я новичок в VBA для Word (использовал его в Excel).Я пытаюсь организовать большие текстовые документы, которые содержат скопированные и вставленные электронные письма.Я хочу найти дату / время каждого электронного письма, скопировать и вставить его в начало страницы.Все строки, содержащие дату, начинаются с «Date:», поэтому их легко найти.Я написал код, чтобы попытаться скопировать их на верх страницы, но в настоящее время он вставляет все строки даты в верхнюю часть документа.Я понимаю, почему, я просто не могу понять, как это изменить.

Что я тогда смогу сделать, так это сделать первую строку каждой страницы заголовком, по которому я могу отсортировать.

Мой исходный код выглядит следующим образом:

Sub Copy_Dates_to_Top()
If Selection.StoryType <> wdMainTextStory Then
    With ActiveDocument.ActiveWindow.View
        .Type = wdPrintView
        .SeekView = wdSeekMainDocument
    End With
End If

Selection.HomeKey Unit:=wdStory
With Selection.Find
    .Text = "Date: "
    .Format = False
    .Forward = True
    .MatchWildcards = False
    .Wrap = wdFindStop
    While .Execute
        Selection.Expand Unit:=wdLine
        Selection.Copy ' Unit:=wdLine
        Selection.GoTo What:=wdGoToBookmark, Name:="\Page"
        Selection.MoveLeft Unit:=wdCharacter, Count:=1
        Selection.Paste
    Wend
End With
End Sub

1 Ответ

0 голосов
/ 05 октября 2018

Вы можете достичь этого довольно просто, применив уникальный стиль к датам, а затем сослаться на этот стиль через поле STYLEREF в заголовке страницы.Например, следующий макрос использует для этого встроенный в Word «Сильный» стиль символов.

Sub Demo()
Application.ScreenUpdating = False
With ActiveDocument
  With .Range.Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = "Date: [0-9]{1,2}/[0-9]{1,2}/[0-9]{4}"
    .Replacement.Text = "^&"
    .Forward = True
    .Format = True
    .Replacement.Style = "Strong"
    .Wrap = wdFindContinue
    .MatchWildcards = True
    .Execute Replace:=wdReplaceAll
  End With
  .Fields.Add Range:=.Sections.First.Headers(wdHeaderFooterPrimary).Range, _
    Type:=wdFieldEmpty, Text:="STYLEREF Strong", PreserveFormatting:=False
End With
Application.ScreenUpdating = True
End Sub

В «Сильном» стиле Word применяется полужирное форматирование, благодаря которому даты также выделяются в теле документа.

Примечание: Макрос предполагает, что ваши даты представлены в формате ad / m / y или m / d / y;выражение Find может быть изменено для соответствия другому формату даты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...