如何快速识别Word中的空白表列?

时间:2018-10-24 11:16:48

标签: vba word-vba

我在自动生成的Word文档中有很多大表,并且我想删除其中没有值的列。它们都将具有标头,因此从本质上讲,我需要检查第2行到末尾的值,或者仅将整个列获取为字符串,然后在我认为是列标记的​​第一个chr(14)之后进行检查。

是否可以这样,而不会逐行循环显示单元格(这似乎很慢),或者选择似乎导致屏幕出现问题且UI冻结的列,有时会导致Word崩溃。

1 个答案:

答案 0 :(得分:1)

您想做的事完全有可能,但是会遇到问题。根据您是否使用

,报告的选择范围内的单元格数量有所不同(因此要处理的文本也有所不同)

selection.range.cells

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

前者按预期工作,而后者则无法工作。

下面的代码以您描述的方式删除列,并且还包括debug.print语句以演示该问题。

我已经在5x6的表格上测试了代码。您的经验可能有所不同。

{{1}}