【问题标题】:Hide rows conditionally in excel table with VBA使用VBA有条件地在excel表中隐藏行
【发布时间】:2015-12-06 03:06:00
【问题描述】:

如果第一列为空白,我需要能够隐藏表格中的行。我需要宏来处理不同工作表中的表,所以我首先使用 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

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    Each row In myTable.DataBodyRange 实际上会遍历表格正文中的每个单元格,这可能是您不想要的。由于您只检查每一行中的第一列,因此使用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
    

    【讨论】:

    • 小记,Range确实有一个Columns属性。 row.Columns(1).Value 也可以在这里使用。
    • 对,Columns(1) 而不是Columns(1,1)。将更新只是将Cells 显示为另一个选项
    • 这工作完美无缺,我真的很喜欢 Chris 使用 row.Columns(1).value 的方法,它看起来如此简单且非常有意义,只有在看到正确的方法之后。非常感谢。
    • 既然你们太棒了,我想补充一点,再补充一个问题。我想在第一列中找到表格中的最后一行(我知道当它只是一个单元格范围时如何找到最后一行)。然后使下一行可见。基本上我隐藏了所有空白行,但留下下一个可用。让我知道我是否应该将此作为新问题发布
    • 我找到了我的附加问题的答案,所以我想我会分享。只需要使用 activecell.offsett 也做一个 Do Until 循环来跳过任何隐藏的行
    【解决方案2】:

    除了 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:="<>"
    

    【讨论】:

      猜你喜欢
      • 2019-09-18
      • 1970-01-01
      • 2020-03-02
      • 1970-01-01
      • 2011-05-01
      • 2018-06-17
      • 1970-01-01
      • 1970-01-01
      • 2012-05-14
      相关资源
      最近更新 更多