Как напечатать строку найденной строки? - PullRequest
0 голосов
/ 07 января 2020

Я хотел бы найти несколько строк в документе Word, и для каждой найденной строки я хотел бы напечатать (например, debug.print) содержимое всей строки, где находится строка, а не абзац.

Как я могу это сделать? Спасибо

Sub FindStrings
Dim StringsArr (1 to 3)

StringsArr = Array("string1","string2","string3")

For i=1 to 3
 With         
 Selection.Find 
 .ClearFormatting 
 .Text = Strings(i)  
 Debug.Print CurrentRow 'here I need help
 End With 
Next
End Sub

1 Ответ

1 голос
/ 07 января 2020

Термин Row в Word используется только в контексте таблицы. Я предполагаю, что вы имеете в виду термин Line, как в строке текста.

В объектной модели Word нет понятия "линия" (или "страница") из-за алгоритма макета динамического c : все, что делает пользователь, даже меняя принтер, может изменить место, где разрывается строка или страница. Поскольку эти вещи являются динамическими c, объект отсутствует.

Единственный контекст, в котором можно использовать «линию», связан с Selection. Например, можно расширить Selection до начала и / или конца строки. Включение этого в код в вопросе выглядело бы примерно так:

Sub FindStrings()
  Dim StringsArr As Variant
  Dim bFound As Boolean
  Dim rng As Word.Range

  Set rng = ActiveDocument.content
  StringsArr = Array("string1", "string2", "string3")

  For i = LBound(StringsArr) To UBound(StringsArr)
     With rng.Find
       .ClearFormatting
       .Text = StringsArr(i)
       .Wrap = wdFindStop
       bFound = .Execute
       'extend the selection to the start and end of the current line
        Do While bFound
         rng.Select
         Selection.MoveStart wdLine, -1
         Selection.MoveEnd wdLine, 1
         Debug.Print Selection.Text
         rng.Collapse wdCollapseEnd
         bFound = .Execute
        Loop
      End With
      Set rng = ActiveDocument.content
    Next
End Sub

Примечания

Поскольку легче управлять, когда приходится l oop много раз , Range объект используется в качестве базового c объекта поиска, а не Selection. Найденное значение Range выбрано только с целью получения всей строки, поскольку эти методы «Перемещение» для строк работают только с выделением.

Прежде чем l oop может быть продолжено, Range ( или, если мы работали с выделением, то его нужно «свернуть», чтобы код не выполнял поиск и снова не находил один и тот же экземпляр поискового запроса. (Это также причина для Wrap = wdFindStop).

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