【问题标题】:Deleting worksheet row based on value tied to a table根据绑定到表的值删除工作表行
【发布时间】:2023-03-28 01:18:01
【问题描述】:

我有一个工作表,上面有两个表格,从 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

【问题讨论】:

  • Cells() 是从 1 开始的,所以 If .ListRows(i).Range.Cells(1) = 0 Then

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


【解决方案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

现在您可以使用 Intellisense for Worksheet (oWs) 和 ListObject (oList),即您可以看到它们的属性和方法。

【讨论】:

  • 一旦我更改了If .ListRows(i).Range.Cells(1) &lt;= 0 然后更改为Cells(0) 以在A 列的表格之外引用我的公式,这非常有效。谢谢。
猜你喜欢
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-09
  • 1970-01-01
相关资源
最近更新 更多