HERBERS Excel-Forum - das Archiv
Tabellenblätter löschen, auch ausgeblendete
Tom

Hallo zusammen,
ich möchte mittels Makro Tabellenblätter löschen, da mir sonst das Excelfile zu groß wird. Etwa die Hälfte der Tabellenblätter sind ausgeblendet, da ich diese sehr selten benötige. Das Makro muss also für alle visible und aber eben auch hidden Tabellenblätter funktionieren.
Da ich kaum VBA Kenntnisse besitze, habe ich mir über die VBA Excelhilfe folgenden Code überlegt:
Sub Tabellenblatt_loeschen()
Dim Tabelle As Worksheet
Dim Arbeitsblaetter As Variant
Application.DisplayAlerts = False
Arbeitsblaetter = Array("Tabelle2", "Tabelle3", "Tabelle4", "Tabelle5", "Tabelle6", " _
Tabelle7")
For Each Tabelle In Worksheets
If Tabelle = Arbeitsblaetter Then
Tabelle.Delete
End If
Next
Application.DisplayAlerts = True
End Sub
Der ausgedachte Code funktioniert jedoch nicht.
Außerdem müsste ich die Werte im Array vorher per Auswahlliste auswählen können. Es wäre am besten, wenn eine Box aufpopt, indem man die Tabellenblätter, die zu löschen sind auswählen kann und dann nur noch den ok(anwenden) Button drücken muss und das Makro erledigt seine Arbeit und löscht die ausgewählten Tabellenblätter (wie schon geschrieben, müssen dabei auch die ausgeblendeten Tabellenblätter gelöscht werden).
Wie müsste der code dafür aussehen, wer kann mir helfen?
Bitte beachten, dass ich absoluter Anfänger bin, d.h. ich kann nicht so viel mit Codeschnipseln anfangen, sondern bräuchte ein komplettes Gerüst, das ich dann nur noch mit den entsprechenden Tabellennamen anpassen muss.
Vielen Dank im voraus!
tom

AW: Tabellenblätter löschen, auch ausgeblendete
{Boris}

Hi Tom,
aus der Hand - somit ungetestet:
Sub Weg_Damit()
Const WEG_DAMIT As String = "Tabelle2, Tabelle3, Tabelle4, Tabelle5, Tabelle6, Tabelle7"
Dim Ws As Worksheet
Application.DisplayAlerts = False
For Each Ws In ThisWorkbook.WorkSheets
If Instr(1, WEG_DAMIT, Ws.Name) Then Ws.Delete
Next Ws
Application.DisplayAlerts = True
End Sub
Grüße Boris
hier Dein geänderter Code
Tino

Hallo,
sollte so funktionieren.
Sub Tabellenblatt_loeschen()
Dim Tabelle As Worksheet
Dim Arbeitsblaetter() As Variant

With Application
.DisplayAlerts = False
.ScreenUpdating = False
    
    Arbeitsblaetter = _
    Array("Tabelle2", "Tabelle3", "Tabelle4", "Tabelle5", "Tabelle6", "Tabelle7")
    
    For Each Tabelle In ThisWorkbook.Worksheets
        If IsNumeric(.Match(Tabelle.Name, Arbeitsblaetter, 0)) Then
            Tabelle.Visible = True: Tabelle.Delete
        End If
    Next

.ScreenUpdating = True
.DisplayAlerts = True
End With

End Sub
Gruß Tino
AW: hier Dein geänderter Code
Tom

Vielen Dank erstmal für Eure Antworten,
es funktionieren beide codes.
Mein Problem ist aber, dass sich je nach Kalkulation, die durchzuführen ist, die zu löschenden Blätter ändern und nicht immer die gleichen Tabellenblätter sind. Daher brauche ich eine Vorabfrage, welche Blätter durch das Makro zu löschen sind.
Entweder per aufblendendem Dialog (die zu löschenden Tabellenseiten anhaken und das Makro löscht per anwenden Button diese Blätter.
Eine andere Möglichkeit wäre, das sich das Makro auf einen Range von einem Tabellenblatt bezieht und die entsprechenden Blätter nur löscht, wenn der Wert im Auswahlbereich z.B. 1 ist. Bei 0 bzw. "" soll das entsprechende Blatt nicht gelöscht werden.
würde das so ähnlich gehen?

Dim Tabelle As Worksheet
Dim Markierung As Range, Wert As String
Set Markierung = ActiveSheet.Range("A1:A35")
For Each Zelle In Markierung
Wert = Zelle.Value
If Wert = 1 Then Tabelle.delete  ' hier müsste das makro dann natürlich den entsprechdenden  _
Tabellenwert aus dem Feld auslesen und entsprechend verarbeiten können.
Next Zelle
Leider komme ich da zu keinem Ergebnis. Die weitaus elegantere Lösung wäre natürlich eine Box, bei der man einfach neben dem Tabellennamen z.B. "Tabelle2"; "Tabelle3" usw. einen Haken setzen kann. Ist der Haken gesetzt, soll beim drücken des Anwenden Buttons gelöscht werden, ist entsprechend kein Haken vor z.B. "Tabelle3" soll diese aucvh nicht gelöscht werden.
Denke, das ist ziemlich umfangreich, oder gibt es dafür eine Lösung?
Danke nochmals für die bereits beireitgestellten Lösungen!
Tom
AW: hier Dein geänderter Code
Tino

Hallo,
hier wen auf der entsprechenden Tabelle in Zelle A1 eine 1 steht.
Sub Tabellenblatt_loeschen()
Dim Tabelle As Worksheet
Dim Arbeitsblaetter() As Variant

With Application
.DisplayAlerts = False
.ScreenUpdating = False
    
    Arbeitsblaetter = _
    Array("Tabelle2", "Tabelle3", "Tabelle4", "Tabelle5", "Tabelle6", "Tabelle7")
    
    For Each Tabelle In ThisWorkbook.Worksheets
        If IsNumeric(.Match(Tabelle.Name, Arbeitsblaetter, 0)) Then
           If Tabelle.Cells(1, 1) = 1 Then Tabelle.Visible = True: Tabelle.Delete
        End If
    Next

.ScreenUpdating = True
.DisplayAlerts = True
End With

End Sub
Gruß Tino
Auswahlbox?
Tom

Text:
Vielen Dank erstmal für Eure Antworten,
es funktionieren beide codes.
Mein Problem ist aber, dass sich je nach Kalkulation, die durchzuführen ist, die zu löschenden Blätter ändern und nicht immer die gleichen Tabellenblätter sind. Daher brauche ich eine Vorabfrage, welche Blätter durch das Makro zu löschen sind.
Entweder per aufblendendem Dialog (die zu löschenden Tabellenseiten anhaken und das Makro löscht per anwenden Button diese Blätter.
Eine andere Möglichkeit wäre, das sich das Makro auf einen Range von einem Tabellenblatt bezieht und die entsprechenden Blätter nur löscht, wenn der Wert im Auswahlbereich z.B. 1 ist. Bei 0 bzw. "" soll das entsprechende Blatt nicht gelöscht werden.
würde das so ähnlich gehen?

Dim Tabelle As Worksheet
Dim Markierung As Range, Wert As String
Set Markierung = ActiveSheet.Range("A1:A35")
For Each Zelle In Markierung
Wert = Zelle.Value
If Wert = 1 Then Tabelle.delete  ' hier müsste das makro dann natürlich den entsprechdenden  _
Tabellenwert aus dem Feld auslesen und entsprechend verarbeiten können.
Next Zelle
Leider komme ich da zu keinem Ergebnis. Die weitaus elegantere Lösung wäre natürlich eine Box, bei der man einfach neben dem Tabellennamen z.B. "Tabelle2"; "Tabelle3" usw. einen Haken setzen kann. Ist der Haken gesetzt, soll beim drücken des Anwenden Buttons gelöscht werden, ist entsprechend kein Haken vor z.B. "Tabelle3" soll diese auch nicht gelöscht werden.
Denke, das ist ziemlich umfangreich, oder gibt es dafür eine Lösung?
Danke nochmals für die bereits beireitgestellten Lösungen!
Tom
AW: Auswahlbox?
Tino

Hallo,
kannst ja mal testen, habe eine Userform eingebaut,
starten kannst Du mit der Tastenkombination Strg+d.
https://www.herber.de/bbs/user/66624.xls
Gruß Tino