2016-01-25 104 views
2

我試圖運行刪除所有工作表欄三的代碼。刪除工作表

以下語法錯誤結果代碼:

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

您有剩餘'End If'我已經刪除。 – brettdj

回答

3

你不能把所有的「名稱查詢」,在這樣的一條線。試試這個(更換你的。如果塊):

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 
0

雖然@帕特里克的回答是最優雅的,有問題你的代碼是if語句,如果你有多個條件,你必須寫下如下的代碼:

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

在附註中,如果你將代碼寫入exec UTE如果邏輯測試是在同一行,像這樣的邏輯測試真:

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

你不需要End If聲明。

+0

謝謝你,我收到一個「運行時錯誤'1004''方法'刪除對象'_Worksheet'失敗,在代碼的」ws.Delete「組件,我是否有可能避免這種情況? – DRod

+0

檢查您的工作簿,可能是因爲您的工作表沒有符合條件,宏嘗試刪除所有工作表,但工作簿不能有0個工作表。您可以將'ThisWorkbook.Worksheets.Count> 1'添加到'If'語句。這樣,如果只有一張紙,則不管名稱如何都保留。 – SilentRevolution

1

而不是通過對三個名字的所有圖紙和測試循環中,你可以更簡單地說,你想要的三片移動到一本新書:

這可以在一個單一的線來完成,你可以添加更多的代碼關閉原始工作簿,錯誤處理以檢查所有這些表格是否存在等。

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