Ich habe ein Problem, dass mich seit Tagen fast in den Wahnsinn treibt und hoffe, dass mir hier jemand einen Tipp geben kann der mich vor dem Irrenhaus bewahrt.
In einer Arbeitsmappe lege ich Blätter mit den Namen TypA TypJ an.
Jedes Blatt steht für einen Typen.
Die Anzahl der Typen variiert.
D.h. habe ich bswp. 3 Typen, dann hat die Mappe entsprechend die Blätter TypA, TypB, TypC.
Das Anlegen der Typen sowie das spätere Hinzufügen von Typen funktioniert.
Nun kann es sein, dass ich im Laufe der Bearbeitung in der Mappe die Anzahl der Typen reduzieren will. Dazu sollen die überflüssigen Blätter gelöscht werden.
Beispiel:
Es gibt die Blätter TypA, TypB, TypC, TypD. Ich hätte nun gerne aber nur 2 Typen, dann sollen die Blätter TypC und TypD gelöscht werden. Ausgelöst wird dies per Knopfdruck.
Eigentlich ja eine ganz banale Sache.
Ich habe schon alle möglichen Varianten ausprobiert (auch unterschiedliche Schleifen bspw. for each, schleifen vorwärts und rückwärts.). Jedes mal das gleiche Problem. Das Makro läuft bis zum letzten Blatt welches gelöscht wird problemlos durch.
Nach dem Löschen des letzten Blattes hängt sich Excel komplett auf ohne in die Fehlerbehandlung zu springen (Microsoft Office Excel hat ein Problem festgestellt und muss beendet werden).
Was mache ich falsch?
Wenn es sich um einen Excelbug handelt was kann ich dagegen tun?
Wäre super, wenn mir jemand einen Tipp geben könnte!
Vielen Dank!
Mario
Hier meine aktuelle Codevariante. Da ich schon diverse Lösungen ausprobiert habe wirkt der Code zugegebenermaßen etwas zu kompliziert und teilweise doppelt.
Anmerkung:
Es gibt keinen Blattschutz.
Public Sub Blaetter_loeschen()
On Error GoTo Fehlerbehandlung
' Application.ScreenUpdating = True
Dim Wert_Soll As Integer
Dim Wert_Ist As Integer
Dim Anzahl As Integer
Dim Zahl_Blatt_IST As Integer
Dim Zahl_Blatt_A As Integer
Wert_Soll = Worksheets("Uebersicht").Range("D13").Value 'Gewünschter Wert
Anzahl = ActiveWorkbook.Sheets.Count 'Anzahl aller Blätter der Mappe
Dim Blattname As String
For i = Anzahl To 1 Step -1 'To Anzahl
Blattname = ActiveWorkbook.Worksheets(i).Name
Select Case Blattname
Case Is = "TypA", "TypB", "TypC", "TypD", "TypE", "TypF", "TypG", "TypH", "TypI", "TypJ"
'ASCII für A == 65, B==66 usw
'Anmerkung für Herberforum: selbst wenn ich für Zahl_Blatt_IST und Zahl_Blatt_A feste Werte _
schreibe, das gleich Problem.
Zahl_Blatt_IST = CInt(Asc(Right(Blattname, 1))) 'Assii sicherheitshalber nochmal in _
Integer umwandeln
Zahl_Blatt_A = CInt(Asc("A") + Wert_Soll - 1)
If Zahl_Blatt_IST > Zahl_Blatt_A Then
'Application.DisplayAlerts = False
Worksheets(Blattname).Select 'Delete
MsgBox "test"
Worksheets(Blattname).Delete
'Application.DisplayAlerts = True
End If
Case Else
'nix
End Select
Next i
Exit Sub
Fehlerbehandlung:
Dim F_prozedur As String
F_prozedur = "Blaetter_loeschen"
MsgBox Erl
Select Case Err.Number
Case Is = 9
MsgBox "fehler 9"
Resume Next
Case Else
Call Fehlerbehandlung(F_prozedur, Err.Number, Err.Description, Err.HelpFile)
End Select
End Sub