VBA: Automatisch mehrere Tabellenblätter löschen?
Moin, ich möchte gerne mehrere Tabellenblätter löschen (Excel -> VBA). Das Problem dabei: Die Nummer des ersten und letzten zu löschenden Blattes soll abgefragt werden. Habe jetzt schon die eine oder andere Zeile "zusammengebastelt", allerdings läuft das Sub noch nicht so ganz rund. Kann mir da jemand weiterhelfen?? Bin mit VBA leider nicht so vertraut....
Sub Aufgabe 17()
Dim intWert1 As Integer
Dim intWert2 As Integer
Dim intWert3 As Integer
intWert1 = InputBox("Nummer des ersten zu löschenden Blattes?", "Tabellenblätter löschen", 0)
intWert2 = InputBox("Nummer des letzten zu löschenden Blattes?", "Tabellenblätter löschen", 0)
Application.DisplayAlerts = False
For intWert3 = intWert1 To intWert2
intWert3 = "Tabelle" + intWert1
Worksheets(intWert3).Delete
Next intWert3
Application.DisplayAlerts = True
End Sub
2 Antworten
Der Haken an der Sache mit dem löschen ist:
Die interne Nummerierung der Tabellenblätter (TabBl) stimmt nur bei erstmaliger Anwendung überein. Werden TabBl gelöscht oder eingefügt, so ist die "Tabelle3" nicht unbedingt die interne 3.Tabelle, sondern kann auch die fünfte oder die achte sein (abhängig vom Erstellungszeitpunkt).
Weiterer Haken: wird ein TabBl gelöscht, ändert sich die interne Bezeichnung für ALLE TabBl.
Also kann man die interne Nummerierung nicht verwenden.
Außerdem ist darauf zu prüfen, ob das TabBl mit dem Makro (hier TabBl 1) etwa gelöscht werden soll, dann wäre das Makro auch weg.
Zum probieren: (es wird "rückwärts" gelöscht)
Dim intWert1 As Integer
Dim intWert2 As Integer
Dim intWert3 As Integer
intWert1 = InputBox("Nummer des ersten zu löschenden Blattes?", "Tabellenblätter löschen", 0)
intWert2 = InputBox("Nummer des letzten zu löschenden Blattes?", "Tabellenblätter löschen", 0)
Application.DisplayAlerts = False
For intWert3 = intWert2 To intWert1 Step -1
nam = Me.Name 'Makro beinhaltendes TabBl
If "Tabelle" & intWert3 = nam Then 'wenn dieses TabBl
MsgBox "ich kann mich nicht selbst löschen"
Else
Worksheets(intWert3).Delete
End If
Next
Application.DisplayAlerts = True
Klappt es so ?
Gruß aus Berlin
Der "+"-Operator lässt sich nur auf gleichartige Dinge anwenden, also entweder Zahl + Zahl oder String + String.
Worksheets(...) geht mit Zahl oder String; Zahl bedeutet den Index in der Reihenfolge, in der die Tabellen hintereinander stehen (angefangen bei 1), String bedeutet den Namen der Tabelle.
Lass doch einfach die Zeile
intWert3 = "Tabelle" + intWert1
weg.