/ / Löschen Sie Blätter, die KEINEN spezifischen Text enthalten - Excel, VBA, Excel-VBA

Löschen Sie Blätter, die KEINEN spezifischen Text enthalten - Excel, VBA, Excel-VBA

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

Nur 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