繁体   English   中英

使用VBA在Excel表中有条件地隐藏行

[英]Hide rows conditionally in excel table with VBA

如果第一列为空白,则需要能够隐藏表中的行。 我需要宏来处理不同工作表中的表,因此我首先使用listobjects搜索表名,获取表名没有问题。 我已经看到了如何使用一般范围的单元格(而不是在表格中)完成此操作。 任何帮助表示赞赏。

我有一个相似的宏来取消隐藏表中的行,并且它工作良好,因为它可以简单地循环遍历ListObject变量“ MyTable”中的所有行,并且没有IF语句。

    HideBlankTableRows()

    Application.ScreenUpdating = False

    Dim ws As Worksheet
    Dim myTable As ListObject
    Dim row As Range

    Set ws = ActiveSheet
    Set myTable = ws.ListObjects(1)

    For Each row In myTable.DataBodyRange
       If row.Columns(1, 1).Value = "" Then     ' Error is caused by this row
           row.Hidden = True
        End If
     Next

    End Sub

实际上, Each row In myTable.DataBodyRange将循环遍历表主体中的每个单元格,您可能不希望这样做。 由于您只检查每行的第一列,因此使用Each row In myTable.DataBodyRange.Rows表中的Each row In myTable.DataBodyRange.Rows

也, Range对象没有Columns属性,因此您必须 您可以使用Cells属性并提供要引用的单元格的行和列号(第1行,第1列)。

更新后的代码如下:

For Each row In myTable.DataBodyRange.Rows
    If row.Cells(1, 1).Value = "" Then
       row.Hidden = True
    End If
Next

除了JayCal提供的修复程序之外,您还可以利用ListObject属性按名称引用列:

For Each rw In myTable.ListColumns("ColumnName").DataBodyRange
    If rw.Value = vbNullString Then
        rw.EntireRow.Hidden = True
    End If
Next

您还可以使用ListObject AutoFilter方法

myTable.Range.AutoFilter Field:=lo.ListColumns("ColumnName").Index, Criteria1:="<>"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM