Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen

Tabellenblätter löschen, auch ausgeblendete | Herbers Excel-Forum


Betrifft: Tabellenblätter löschen, auch ausgeblendete von: Tom
Geschrieben am: 15.12.2009 08:38:52

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

  

Betrifft: AW: Tabellenblätter löschen, auch ausgeblendete von: {Boris}
Geschrieben am: 15.12.2009 09:24:07

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


  

Betrifft: hier Dein geänderter Code von: Tino
Geschrieben am: 15.12.2009 09:38:53

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


  

Betrifft: AW: hier Dein geänderter Code von: Tom
Geschrieben am: 15.12.2009 09:56:40

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


  

Betrifft: AW: hier Dein geänderter Code von: Tino
Geschrieben am: 15.12.2009 10:29:49

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


  

Betrifft: Auswahlbox? von: Tom
Geschrieben am: 15.12.2009 10:31:31

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


  

Betrifft: AW: Auswahlbox? von: Tino
Geschrieben am: 16.12.2009 10:51:42

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


Beiträge aus den Excel-Beispielen zum Thema "Tabellenblätter löschen, auch ausgeblendete"