2015-07-17 13 views
6

Ho una macro che genera un numero di cartelle di lavoro. Mi piacerebbe che i macro, all'inizio della corsa, controllassero se il file contiene 2 fogli di calcolo e li elimina se esistono.Elimina foglio di lavoro in Excel tramite VBA

Il codice che ho provato era:

If Sheet.Name = "ID Sheet" Then 
    Application.DisplayAlerts = False 
    Sheet.Delete 
    Application.DisplayAlerts = True 

End If 

If Sheet.Name = "Summary" Then 
    Application.DisplayAlerts = False 
    Sheet.Delete 
    Application.DisplayAlerts = True 
End If 

Questo codice restituisce un errore:

run time error #424, object required.

probabilmente ho la formattazione sbagliata, ma se c'è un modo più semplice per fare questo, sarebbe molto utile

+2

È necessario ciclo e quindi chiamare 'Sheet (i) .Name' – moffeltje

risposta

16

Considerate:

Sub SheetKiller() 
    Dim s As Worksheet, t As String 
    Dim i As Long, K As Long 
    K = Sheets.Count 

    For i = K To 1 Step -1 
     t = Sheets(i).Name 
     If t = "ID Sheet" Or t = "Summary" Then 
      Application.DisplayAlerts = False 
       Sheets(i).Delete 
      Application.DisplayAlerts = True 
     End If 
    Next i 
End Sub 

NOTA:

Bec ause siamo cancellando, eseguiamo il ciclo all'indietro.

-2

provare questo con i tuoi se dichiarazioni:

Application.DisplayAlerts = False 
Worksheets(“Sheetname”).Delete 
Application.DisplayAlerts = True 
+0

Questo lancerà una "Indice fuori gamma" errore se Sheetname non esiste. – Eddy

+0

Ovviamente lo farà, ma "Sheetname" deve essere cambiato con il nome effettivo del foglio che si desidera eliminare. Quindi, se si desidera eliminare Sheet1 Sheetname diventerà "Sheet1" – Luuklag

+0

OP ha specificato in modo specifico che desidera verificare se i fogli esistono, quindi l'ipotesi che i fogli esisteranno sempre non è valida. La tua modifica "per coloro che non comprendono la codifica" non è appropriata. – Eddy

5

provare questo codice:

For Each aSheet In Worksheets 

    Select Case aSheet.Name 

     Case "ID Sheet", "Summary" 
      Application.DisplayAlerts = False 
      aSheet.Delete 
      Application.DisplayAlerts = True 

    End Select 

Next aSheet 
1

È possibile utilizzare On Error Resume Next quindi non è necessario scorrere tutti i fogli nella cartella di lavoro.

Nota: quando la cartella di lavoro contiene solo questi due fogli, verrà eliminato solo il primo foglio.

Dim book 
Dim sht as Worksheet 

set book= Workbooks("SomeBook.xlsx") 

On Error Resume Next 

Application.DisplayAlerts=False 

Set sht = book.Worksheets("ID Sheet") 
sht.Delete 

Set sht = book.Worksheets("Summary") 
sht.Delete 

Application.DisplayAlerts=True 

On Error GoTo 0 
-1
Worksheets("Sheet1").Delete 
Worksheets("Sheet2").Delete