[英]How to use Excel VBA to conditionally add and delete certain rows in a table
[英]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.