Anzeige
Archiv - Navigation
1120to1124
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
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

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
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

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige