Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Tabellenblätter löschen, auch ausgeblendete

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
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Tabellenblätter löschen, auch ausgeblendete
15.12.2009 09:24:07
{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
Anzeige
hier Dein geänderter Code
15.12.2009 09:38:53
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
Anzeige
AW: hier Dein geänderter Code
15.12.2009 09:56:40
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
Anzeige
AW: hier Dein geänderter Code
15.12.2009 10:29:49
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
Anzeige
Auswahlbox?
15.12.2009 10:31:31
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
Anzeige
AW: Auswahlbox?
16.12.2009 10:51:42
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
;
Anzeige
Anzeige

Infobox / Tutorial

Tabellenblätter in Excel löschen, auch ausgeblendete


Schritt-für-Schritt-Anleitung

Um mehrere Tabellenblätter in Excel zu löschen, auch wenn sie ausgeblendet sind, kannst Du ein VBA-Makro verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul hinzu: Rechtsklicke auf "VBAProject (DeineDatei.xlsx)", wähle "Einfügen" und dann "Modul".
  3. Kopiere den folgenden Code in das Modul:
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 ThisWorkbook.Worksheets
        If Not IsError(Application.Match(Tabelle.Name, Arbeitsblaetter, 0)) Then
            Tabelle.Visible = True
            Tabelle.Delete
        End If
    Next Tabelle

    Application.DisplayAlerts = True
End Sub
  1. Schließe den VBA-Editor und gehe zurück zu Excel.
  2. Führe das Makro aus: Drücke ALT + F8, wähle Tabellenblatt_loeschen und klicke auf "Ausführen".

Mit dieser Methode kannst Du mehrere Tabellenblätter löschen, auch wenn sie ausgeblendet sind.


Häufige Fehler und Lösungen

  • Fehler: "Das Excel-Blatt kann nicht gelöscht werden"
    Lösung: Stelle sicher, dass das Blatt nicht geschützt ist. Du kannst den Schutz aufheben, indem Du zum Reiter "Überprüfen" gehst und "Blatt schützen" auswählst.

  • Problem: Das Makro löscht keine ausgeblendeten Blätter
    Lösung: Stelle sicher, dass im Code die Zeile Tabelle.Visible = True vor dem Löschen steht, damit das Blatt sichtbar gemacht wird, bevor es gelöscht wird.

  • Fehler beim Ausführen des Makros
    Lösung: Überprüfe, ob alle Tabellennamen im Array korrekt sind und keine Tippfehler enthalten.


Alternative Methoden

Wenn Du keine VBA-Programmierung verwenden möchtest, gibt es auch andere Möglichkeiten, mehrere Blätter zu löschen:

  1. Manuelles Löschen: Halte die STRG-Taste gedrückt und klicke auf die gewünschten Tabellenblätter, um sie auszuwählen. Rechtsklicke dann und wähle "Löschen".

  2. Verwendung einer Userform: Du kannst eine Userform erstellen, die es Dir ermöglicht, die zu löschenden Blätter auszuwählen. Dies erfordert etwas mehr Programmierung, aber es ist eine benutzerfreundliche Lösung.


Praktische Beispiele

Hier sind einige praktische Beispiele, wie Du das Löschen von Blättern automatisieren kannst:

  • Löschen von Tabellenblättern basierend auf Zellwerten: Du kannst ein Makro erstellen, das Blätter löscht, wenn in einer bestimmten Zelle (z.B. A1) der Wert "1" steht.
Sub LoescheMitWert()
    Dim Tabelle As Worksheet
    For Each Tabelle In ThisWorkbook.Worksheets
        If Tabelle.Cells(1, 1).Value = 1 Then
            Tabelle.Delete
        End If
    Next Tabelle
End Sub
  • Löschen mehrerer Tabellenblätter mit einer Auswahlbox: Du kannst eine Auswahlbox in einer Userform erstellen, um die Blätter auszuwählen, die gelöscht werden sollen.

Tipps für Profis

  • Backup erstellen: Bevor Du Tabellenblätter löschst, erstelle immer eine Sicherungskopie Deiner Arbeitsmappe, um Datenverlust zu vermeiden.

  • Makros speichern: Speichere Deine Makros in einer Personal.xlsb-Datei, um sie in jeder Excel-Arbeitsmappe verwenden zu können.

  • Fehlerbehandlung einfügen: Füge eine Fehlerbehandlung in Deinen VBA-Code ein, um unerwartete Fehler zu vermeiden.

On Error Resume Next

FAQ: Häufige Fragen

1. Warum kann ich das Excel-Blatt nicht löschen?
Das könnte daran liegen, dass das Blatt geschützt ist oder dass es die letzte verbleibende Tabelle in der Arbeitsmappe ist.

2. Wie kann ich mehrere Tabellenblätter gleichzeitig löschen?
Du kannst dies mithilfe des VBA-Codes tun, der mehrere Tabellennamen in einem Array definiert.

3. Was ist der Unterschied zwischen "ausgeblendet" und "nicht sichtbar"?
Ein ausgeblendetes Blatt ist immer noch Teil der Arbeitsmappe, während ein nicht sichtbares Blatt nicht mehr existiert, nachdem es gelöscht wurde.

4. Wie kann ich ein Makro in einer ausgeblendeten Arbeitsmappe löschen?
Vergewissere Dich, dass die Arbeitsmappe zuerst sichtbar gemacht wird, bevor Du versuchst, die Blätter zu löschen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige