в Word удалите строки таблицы, которые не содержат определенный текст, или скопируйте эти строки в новый файл - PullRequest
0 голосов
/ 18 июня 2011

Я заранее извинюсь за свои ограниченные знания Visual Basic, но я пытаюсь написать макрос, который будет искать в довольно большой таблице определенную строку, а затем либо удалить строки, которые не содержат эту строкуили скопируйте все строки, которые содержат его, в новый документ Word.Просто способ изолировать строки, содержащие эту строку.

Спасибо!

Ответы [ 2 ]

1 голос
/ 21 июня 2011

Нашел решение с другого форума. Думал, что выложу сюда, если это кому-нибудь поможет:

With ThisDocument.Tables(1)
    For r = .Rows.Count To 1 Step -1
        fnd = False
        For Each c In .Rows(r).Cells
            If InStr(c.Range.Text, "x") > 0 Then fnd = True
        Next
        If Not fnd Then .Rows(r).Delete
    Next
End With

где "x" - текст для поиска.

Мне также потребовался макрос для поиска определенной текстовой строки и удаления этой строки, что можно сделать, удалив «not» из приведенного выше сценария. Однако выполнение сценария занимает некоторое время (для таблицы из 250 строк), поэтому сначала я подумал, что Word заблокирован на тот случай, если тот, кто запускает этот сценарий, заметит подобное поведение и будет обеспокоен. Кроме того, я искал текстовую строку, состоящую из заглавных букв, и сценарий не распознал ее, если только строка поиска ("x") также не была заглавной.

Кроме того, я обнаружил, что этот макрос не работает, если он не скопирован в текстовый документ, где он должен запускаться. Изменение ThisDocument на ActiveDocument позволяет ему работать, только если он находится в шаблоне Normal.

В любом случае, надеюсь, что это кому-нибудь поможет!

1 голос
/ 20 июня 2011

Если вы уже знаете, как поместить курсор в верхнюю ячейку столбца, через который вы перебираете, то вот код, который вы хотели бы поместить, чтобы вся строка была удалена, если текст ячейки пуст.

Пожалуйста, внесите необходимые изменения в код, как считаете нужным для вашего случая

Selection.MoveEnd  'This ensures that you select the content of the cell to read
If InStr(Selection.Text, Chr(7)) Then   'if you select the whole cell it will contain
                                        'character 7 (TAB) so you will also select 
                                        '2 additional invisible characters as well 
    If Trim(Mid(Selection.Text, 1, Len(Selection.Text) - 2)) = "" Then
             Selection.Rows.Delete
    End If
Else
 ' you selected part of the text that does not contain invisible characters 
    If Trim(Mid(Selection.Text, 1, 1)) = "" Then
         Selection.Rows.Delete
    End If
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...