删除工作表

时间:2016-01-25 00:08:45

标签: excel excel-vba vba

我正在尝试运行删除所有工作表栏的代码。

以下代码导致语法错误:

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

3 个答案:

答案 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声明。