0

我有一个工作表,上面有两个表,从 B 列开始。在 AI 列中,有一个与删除空白行按钮相关联的 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
4

1 回答 1

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) 的 Intellisense 和为您工作的 ListObject (oList),即您可以看到它们的属性和方法。

于 2018-11-02T02:43:19.983 回答