Макрос Word удаляет строки из таблицы, если ячейка пуста - PullRequest
0 голосов
/ 15 ноября 2018

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

Sub DeleteEmptyRows()
Set Tbl = Selected.Tables(1)
    With Tbl
        noOfCol = Tbl.Range.Rows(1).Cells.Count
        With .Range
            For i = .Cells.Count To 1 Step -1
                On Error Resume Next
                If Len(.Cells(i).Range) = 2 Then
                    .Rows(.Cells(i).RowIndex).Delete
                    j = i Mod noOfCol
                    If j = 0 Then j = noOfCol
                End If
            Next i
    End With
    End With

End Sub

И это действительно близко к тому, что я хочу, но я просто не уверен, как указать пустые ячейки в столбце 2. Я также попытался изменить строку noOfCol на:

Selection.SetRange Selection.Tables(1).Rows(2).Cells(2).Range.Start, _
Selection.Tables(1).Rows.Last.Cells(2).Range.End

Но это все равно удаляет строки, где любой столбец пуст. Мне нужно, чтобы удалить только те строки, где столбец 2 пуст. Спасибо

Ответы [ 2 ]

0 голосов
/ 21 июня 2019

Приведенный ниже код предназначен для «всех и каждого» страниц после слияния почты [я использовал вложенный цикл (один для [TABLE], а другой для пустых [CELLS]) *

Все коды [уважение к: Синди Мейстер]

  Sub ProcessColTwo()
     Dim pg As Page
     Dim tbl As Word.Table
     Dim ColToCheck As Long
     Dim cel As Word.Cell

       For Each tbl In ActiveDocument.Tables
       ColToCheck = 2
       tbl.Columns(ColToCheck).Select

       For Each cel In Selection.Cells
           If Len(cel.Range.Text) = 2 Then
              cel.Range.Rows(1).Delete
           End If
       Next
       Next
  End Sub
0 голосов
/ 15 ноября 2018

Работа со всеми ячейками в столбце является проблемой, поскольку невозможно установить Range для столбца.Range должен быть непрерывным набором символов в документе.В то время как столбец выглядит смежным, за кулисами его содержание фактически отсутствует.Символы таблицы располагаются сверху слева и справа и сверху вниз (строки).

Ближайший код, который можно получить, - это выбрать столбец и затем работать в объекте Selection.Или зацикливание строк.

Следующий пример кода демонстрирует, как «зацикливать строки» - аналогично тому, что использует код в вопросе.Ключевым моментом здесь является использование Table.Cells для цикла, при этом счетчик For обозначает индекс строки, а номер столбца (2) обозначает индекс столбца.

Sub ProcessColTwo()
    Dim tbl As Word.Table
    Dim nrRows As Long, ColToCheck As Long, i As Long
    Dim cellRange As Word.Range

    Set tbl = ActiveDocument.Tables(1)
    nrRows = tbl.Rows.Count
    ColToCheck = 2

    For i = nrRows To 1 Step -1
        Set cellRange = tbl.Cell(i, ColToCheck).Range
        If Len(cellRange.text) = 2 Then
            cellRange.Rows(1).Delete
        End If
    Next i
End Sub

А вот код, который демонстрируетиспользуя Selection

Sub ProcessColTwo()
    Dim tbl As Word.Table
    Dim ColToCheck As Long
    Dim cel As Word.Cell

    Set tbl = ActiveDocument.Tables(1)
    ColToCheck = 2
    tbl.Columns(ColToCheck).Select
    For Each cel In Selection.Cells
        If Len(cel.Range.text) = 2 Then
            cel.Range.Rows(1).Delete
        End If
    Next
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...