2017-05-10 5 views
1

Ich habe ein Makro, das ich eingerichtet habe, um mehrere Sortierungen und Filter zu durchlaufen, und am Ende jedes Schritts erstellt es ein neues Arbeitsblatt und fügt die gefilterten Informationen ein.Excel löschen Bereits erstellte Blätter

Wenn ich möchte, dass die Person dieselbe Arbeitsmappe mit einem neuen Satz von Daten verwenden kann, möchte ich, dass das Makro alle zuvor erstellten Blätter löscht.

Ich habe mehrere Arten von Code ausprobiert, die alle Arbeitsblätter löschen, aber nicht "P High Offstd" löschen können.

Ich habe versucht, die Aufträge des Löschens sowie verschiedene Möglichkeiten, Arbeitsblätter zu löschen, aber es verweigert, das Arbeitsblatt zu löschen.

Ich habe sogar versucht, den Namen zu ändern, wie es früher Processing High Offstd genannt wurde. Jede Hilfe wäre von Vorteil.

Application.ScreenUpdating = False 
For Each Sheet In ActiveWorkbook.Worksheets 
If Sheet.Name = "Processing 0% Performance" Then 
    Application.DisplayAlerts = False 
    Worksheets("Processing 0% Performance").Delete 
    Application.DisplayAlerts = True 
End If 
Next Sheet 
For Each Sheet In ActiveWorkbook.Worksheets 
If Sheet.Name = "Processing 0 OnStd" Then 
    Application.DisplayAlerts = False 
    Worksheets("Processing 0 OnStd").Delete 
    Application.DisplayAlerts = True 
End If 
Next Sheet 
For Each Sheet In ActiveWorkbook.Worksheets 
If Sheet.Name = "P High OffStd" Then 
    Application.DisplayAlerts = False 
    Worksheets("P High OffStd").Delete 
    Application.DisplayAlerts = True 
End If 
Next Sheet 
For Each Sheet In ActiveWorkbook.Worksheets 
If Sheet.Name = "Processing Low Performance" Then 
    Application.DisplayAlerts = False 
    Worksheets("Processing Low Performance").Delete 
    Application.DisplayAlerts = True 
End If 
Next Sheet 
With ActiveWorkbook.Worksheets("Processing") 
.Range("AA1:AZ" & .Range("AA1").End(xlDown).Row).ClearContents 
.Range("C3:C" & .Range("C3").End(xlDown).Row).ClearContents 
.Range("E3:E" & .Range("E3").End(xlDown).Row).ClearContents 
End With 
+2

vereinfacht werden Könnte sein, dass es das letzte Blatt in der Arbeitsmappe ist. Arbeitsmappen müssen mindestens ein Blatt haben, sodass Sie das letzte Blatt nicht löschen können. –

+0

Warum löschen Sie nicht einfach die Blätter, die Sie in Ihrem 'For Each Loop' aus Ihrem Filter neu erstellen möchten - keine Notwendigkeit für all diesen Zeilencode- – 0m3r

+0

Leider ist es nicht das letzte Blatt. Es gibt das Blatt, auf dem meine Buttons, auf denen die MACROs stehen, sowie das Blatt mit den Quelldaten stehen. –

Antwort

0

Ihr Code kann zu

With Application 
    .ScreenUpdating = False 
    .DisplayAlerts = False 
End With 

For Each Sheet In ActiveWorkbook.Worksheets 
    If Sheet.Name = "Processing 0% Performance" Or Sheet.Name = "Processing 0 OnStd" _ 
    Or Sheet.Name = "P High OffStd" Or Sheet.Name = "P High OffStd" Or Sheet.Name = "Processing Low Performance" Then 
     Sheet.Delete 
Next Sheet 

With ActiveWorkbook.Worksheets("Processing") 
    .Range("AA1:AZ" & .Range("AA1").End(xlDown).Row).ClearContents 
    .Range("C3:C" & .Range("C3").End(xlDown).Row).ClearContents 
    .Range("E3:E" & .Range("E3").End(xlDown).Row).ClearContents 
End With 
With Application 
    .DisplayAlerts = True 
    .ScreenUpdating = True 
End With 
+0

Tom der obige Code tatsächlich bei "Next Sheet" aus, aber ich habe einen ähnlichen verdichteten Code verwendet, der immer noch das eine Blatt entfernen konnte. –

+0

Wie viele Blätter haben Sie nach dem Lauf übrig? und welches Blatt kann nicht entfernt werden? – Tom

+0

1 Blatt, das das Blatt mit dem Namen "P High Offstd" ist. Dieses Blatt ist das fünfte Blatt in der Arbeitsmappe. Ich bin mir bewusst, dass ich technisch eine Blattzählung durchführen und die Blätter 3-7 entfernen könnte, aber ich wollte genauer sein, um Benutzerfehler zu vermeiden. –

Verwandte Themen