Как я могу быстро определить пустой столбец таблицы в Word? - PullRequest
0 голосов
/ 24 октября 2018

У меня много больших таблиц в автоматически сгенерированных текстовых документах, и я хочу удалить столбцы, в которых нет значений.Все они будут иметь заголовки, поэтому, по сути, мне нужно проверить значения строк 2 до конца или просто получить весь столбец в строке и проверить после первого chr (14), который, как я понимаю, является маркером столбца.

Возможно ли это без циклического перемещения по ячейкам, строка за строкой, которая кажется медленной, или выбора столбца, который, по-видимому, вызывает проблемы на экране, и пользовательский интерфейс зависает, иногда сбивая Word.

1 Ответ

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

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

selection.cells

или

selection.range.cells

Первый работает какОжидается, что последний не делает.

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

Я тестировал код настол 5х6.Ваш опыт может отличаться.

Sub DeleteEmptyTableColumns(this_table As Word.Table)
    Dim my_cells                As Range
    Dim my_column               As Long
    Dim my_text                 As String
    Dim my_last_row             As Long

    ' Assumes that the Table is uniform
    my_last_row = this_table.Rows.Count
    Application.ScreenUpdating = False

    With this_table
        For my_column = .Columns.Count To 1 Step -1
            DoEvents
            Set my_cells = .Range.Document.Range( _
                Start:=.Cell(2, my_column).Range.Start, _
                End:=.Cell(my_last_row, my_column).Range.End)
            ' We have to use selection to get the correct text
            my_cells.Select

            Debug.Print
            ' Wrong numbers and text
            Debug.Print my_cells.Cells.Count
            Debug.Print my_cells.Text

            ' Correct information
            Debug.Print Selection.Cells.Count
            Debug.Print Selection.Text

            ' Back to the wrong information
            Debug.Print Selection.Range.Cells.Count
            Debug.Print Selection.Range.Text

            my_text = Selection.Text

            ' Add other replacments as required.
            my_text = Replace(my_text, " ", vbNullString)
            my_text = Replace(my_text, vbCrLf, vbNullString)
            my_text = Replace(my_text, Chr$(13), vbNullString)
            my_text = Replace(my_text, Chr$(7), vbNullString)

            If Len(my_text) = 0 Then
                this_table.Columns(my_column).Delete

            End If

        Next

    End With

    Application.ScreenUpdating = True

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