我有一个工作表,该工作表的两个表位于B列开始。在A列中,我有一个COUNTA公式,该公式与“删除空白行”按钮相关。我的代码可以很好地删除表行,但我需要它删除整个工作表行,以便它也删除A列中的公式,而不是随着添加或删除行而不断向下移动。
麻烦的是,我在工作表上有两个表,因此我需要执行删除行操作以仅引用Local_1表,并在到达该表末尾时停止循环。
关于如何删除整行而不是仅删除表行的任何建议吗?
Dim i As Long
Application.ScreenUpdating = False
ActiveSheet.Unprotect Password:=pswStr
Rows.EntireRow.Hidden = False
With ActiveSheet.ListObjects("Local_1")
For i = .ListRows.Count To 1 Step -1
If .ListRows(i).Range.Cells(0) <= 0 Then
.ListRows(i).Delete
End If
Next i
End With
答案 0 :(得分:1)
为了不限制样式,只需替换
If .ListRows(i).Range.Cells(0) <= 0 Then
.ListRows(i).Delete
End If
使用
If .ListRows(i).Range.Cells(1) <= 0 Then 'as Tim Williams mentioned
'.ListRows(i).Delete
ActiveSheet.Rows(Range(.DataBodyRange.Address).Row + i - 1).Delete
End If
但是(为了限制样式)我强烈建议您使用(声明)如下变量:
Sub ListEntireRow()
Dim i As Long
Dim oWs As Worksheet
Dim oList As ListObject
Application.ScreenUpdating = False
Set oWs = ActiveSheet
Set oList = oWs.ListObjects("Local_1")
oWs.Unprotect Password:=pswStr
Rows.EntireRow.Hidden = False
With oList
For i = .ListRows.Count To 1 Step -1
If .ListRows(i).Range.Cells(1) <= 0 Then
' .ListRows(i).Delete
oWs.Rows(Range(.DataBodyRange.Address).Row + i - 1).Delete
End If
Next i
End With
Application.ScreenUpdating = True
End Sub
现在,您已经可以使用工作表的智能感知(oWs)和ListObject(oList)了,即可以看到它们的属性和方法。