我正在尝试从activeWorkbook中删除所有不必要的工作表,但是我要删除Sheet1,因为这将是我的主要工作表,其中包含初始原始数据。当我运行以下代码时,我的工作表将被删除,但是一旦到达我最后剩下的工作表,我就会收到此错误。运行时错误'1004':工作簿必须至少包含一个可见的工作表。 仅供参考:我正在个人宏书中编写此宏,以便可以将其用于所有其他excel电子表格。
Sub deleteSheets()
Dim ws As Worksheet
Application.DisplayAlerts = False
For Each ws In ActiveWorkbook.Worksheets
If Not ws Is Sheet1 Then ws.Delete
Next ws
End Sub
答案 0 :(得分:2)
If Not ws Is Sheet1 Then ws.Delete
布尔表达式{object1} Is {object2}
评估引用相等性:如果True
为{object1}
,它将为{object2}
。
这里ws
是ActiveWorkbook
中的工作表,Sheet1
是(可能是)全局标识符,它引用了{{1}中存在的工作表的CodeName
}-可能不是当前活动的工作簿。
如果ThisWorkbook
不是ThisWorkbook
,则对每个工作表的引用相等都将失败,并且该循环将尝试将其全部删除,这就是您得到该错误的原因。
除非您要删除ActiveWorkbook
中的工作表,否则不能使用引用等式进行检查。
您可以go by Index
,也可以按名称-在任何情况下,确保正在使用的工作簿中不止一个工作表是一个好主意:
ThisWorkbook
确认您要删除的工作表具有预期的索引(For Each ws In ActiveWorkbook.Worksheets
Debug.Assert ActiveWorkbook.Worksheets.Count > 1
If Not ws.Name = "Sheet1" Then ws.Delete
Next
)和/或预期的名称;为此使用项目浏览器(Ctrl + R)和属性(F4)工具窗口。请记住,1
属性是工作表的(Name)
标识符,您只能在CodeName
的VBA项目中使用/访问它;您需要验证其ThisWorkbook
属性-这是工作表的用户可修改的“标签名称”。
答案 1 :(得分:1)
dim i as Integer
dim ws as Worksheet
For i = 2 to ActiveWorkbook.Worksheets.Count
Sheets(2).Delete
Next