删除工作表

我试图运行删除所有工作表栏三的代码。

下面的代码导致语法错误:

Sub Delete_Sheets() Dim ws As Worksheet Application.DisplayAlerts = False For Each ws In ThisWorkbook.Worksheets If ws.Name <> "Sheet1", "LBO", "Factset codes" Then ws.Delete Next Application.DisplayAlerts = True End Sub 

你不能把所有的“名称检查”在这样的一行。 试试这个(replace你的If块):

 Select Case ws.Name Case "Sheet1", "LBO", "Factset codes"' Do Nothing here Case Else: ws.Delete End Select 

编辑 (添加代码,使其无声删除):

 Application.DisplayAlerts = False Select Case ws.Name Case "Sheet1", "LBO", "Factset codes" ' Do Nothing here Case Else If Worksheets.Count > 1 Then ws.Delete End Select Application.DisplayAlerts = True 

而不是遍历所有表单,并testing三个名字,你可以更简单地移动你想要一本新书的三张:

这可以在一行中完成,你可以添加更多的代码来closures原始工作簿,error handling来检查所有这些表单是否存在等。

 Sheets(Array("Sheet1", "Factset code", "LBO")).Copy 

虽然@ PatricK的答案是最优雅的,但是你的代码的问题是if语句,如果你有多个条件,你必须写下如下内容:

 If Not ws.Name = "Sheet1" And Not ws.Name = "LBO" And Not ws.Name = "Factset codes" Then ws.Delete End If 

在附注中,如果您编写要执行的代码,如果逻辑testing在与逻辑testing相同的行上是真的,如下所示:

 If Not ws.Name = "Sheet1" And Not ws.Name = "LBO" And Not ws.Name = "Factset codes" Then ws.Delete 

你不需要End If语句。