我正在尝试运行删除所有工作表栏的代码。
以下代码导致语法错误:
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
答案 0 :(得分:3)
您不能将所有“名称检查”放在一行中。试试这个(替换你的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
答案 1 :(得分:1)
您可以更简单地将所需的三张纸移动到新书中,而不是遍历所有纸张并测试三个名称:
这可以在一行中完成,您可以添加更多代码来关闭原始工作簿,错误处理以检查所有这些工作表是否存在等。
Sheets(Array("Sheet1", "Factset code", "LBO")).Copy
答案 2 :(得分:0)
虽然@ PatricK的答案是最优雅的,但代码的问题是if语句,如果你有多个标准,你必须写下以下内容:
If Not ws.Name = "Sheet1" And Not ws.Name = "LBO" And Not ws.Name = "Factset codes" Then
ws.Delete
End If
另一方面,如果您编写要执行的代码,如果逻辑测试在与逻辑测试相同的行上为true,则执行以下操作:
If Not ws.Name = "Sheet1" And Not ws.Name = "LBO" And Not ws.Name = "Factset codes" Then ws.Delete
您不需要End If
声明。