根据与表格相关的值删除工作表行

时间:2018-11-01 23:30:09

标签: excel vba delete-row listobject excel-tables

我有一个工作表,该工作表的两个表位于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

1 个答案:

答案 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)了,即可以看到它们的属性和方法。