In Excel muss ich alle Blätter löschen, die nicht mit (2) enden.
Der folgende Code löscht korrespondierend diejenigen, die DO in (2) enden. Ich bin nur nicht sicher, wie ich das rückgängig machen kann, "Not Like" scheint nicht zu funktionieren
Dim ws As Worksheet
For Each ws In ThisWorkbook.Sheets
If ws.Name Like "*" & "(2)" Then
"~~> This check is required to ensure that you don"t get an error
"~~> if there is only one sheet left and it matches the delete criteria
If ThisWorkbook.Sheets.Count = 1 Then
MsgBox "There is only one sheet left and you cannot delete it"
Else
"~~> This is required to supress the dialog box which excel shows
Application.DisplayAlerts = False
ws.delete
Application.DisplayAlerts = True
End If
End If
Next
Antworten:
0 für die Antwort № 1Nur ein kleiner Tipp über den aktuellen Code. Beweg den Application.DisplayAlerts
außerhalb Ihrer Schleife. Diese müssen im gesamten Makro nur einmal aus- und wieder eingeschaltet werden, wenn Sie es für jedes Blatt ein- und ausschalten. Dadurch erhöht sich die Anzahl der Iterationen im Code und das Makro wird aufgebläht.
Auch für Ihre ursprüngliche Frage wird Ihre if-Anweisung ausgeführt, wenn (2) im Blattnamen vorhanden ist. Um dies zu ändern, einfach setzen Not
nach dem if.
Sie können dies auch mit nur einem tun If
Anweisung, die Ihren Code noch einmal reduziert.
Dim ws As Worksheet
Application.DisplayAlerts = False
For Each ws In ThisWorkbook.Sheets
If Not ws.Name Like "*" & "(2)" and ThisWorkbook.Sheets.Count > 1 Then
ws.delete
ElseIf ThisWorkbook.sheets.count = 1 then
MsgBox "There is only one sheet left and you cannot delete it"
Exit Sub
End If
Next ws
Application.DisplayAlerts = True
1 für die Antwort № 2
Funktioniert hier nicht gut, Sie müssen nur den vollen Ausdruck negieren
If Not ws.Name Like "*" & "(2)" Then