首页 > 解决方案 > 使用一行 Excel VBA 删除工作表

问题描述

我正在创建一些工作表,并想删除只有一行的工作表。我尝试过遵循两个代码,但它们不起作用。

WSCount = Worksheets.Count
For l = 1 To WSCount
Worksheets(l).Activate
If IsEmpty(ActiveSheet.Cells(2, 1)) Then
ActiveSheet.Delete
WSCount = WSCount - 1
l = l - 1
End If
Next l

下面是第二个。

For Each Worksheet in ActiveWorkbook.Worksheets
If IsEmpty(ActiveSheet.Cells(2,1)) Then
ActiveSheet.Delete
End If
Next

我遇到的问题是当我删除页面时,它会与 for 循环混淆。这直接发生在第一个代码中。在第二个代码中,问题是我没有激活该工作表,因此 Excel 不会删除它。我也必须在其中放置一个 for 循环,这使我在第一个代码中遇到了同样的问题。

可能有一个简单的解决方案,但我的知识有限,所以我能想到的就是放一个 for 循环。

标签: excelvba

解决方案


这就是为什么我们在删除工作表、行、列时总是向后循环......

Sub x()

Dim WSCount As Long, l As Long

WSCount = Worksheets.Count

For l = WSCount To 1 Step -1
    If IsEmpty(Worksheets(l).Cells(2, 1)) Then
        Worksheets(l).Delete
    End If
Next l

End Sub

正如斯科特所说,您的第二位将起作用,因为在您现有的代码中,活动表永远不会改变,所以您只会删除一张表。

For Each Worksheet in ActiveWorkbook.Worksheets
  If IsEmpty(worksheet.Cells(2,1)) Then
    worksheet.Delete
   End If
Next

另请阅读如何避免 select


推荐阅读