/ / Usuń arkusze, w których NIE MA określonego tekstu - excel, vba, excel-vba

Usuń arkusze, które NIE mają określonego tekstu w - excel, vba, excel-vba

W programie Excel muszę usunąć wszystkie arkusze, które nie kończą się (2)

Poniższy kod regularnie usuwa te, które kończą się (2), po prostu nie jestem pewien, jak to odwrócić, „Not Like” nie wydaje się działać

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

Odpowiedzi:

0 dla odpowiedzi № 1

Tylko lekka wskazówka dotycząca twojego obecnego kodu. Przesuń Application.DisplayAlerts poza twoją pętlą. Muszą one być wyłączone i włączone tylko raz w całym makrze, gdzie wyłączasz je dla każdego arkusza. Zwiększa to liczbę iteracji w kodzie i wzmaga makro.

Również dla twojego pierwotnego pytania twoja instrukcja if działa, jeśli (2) jest obecne w nazwie arkusza. Aby to zmienić, po prostu to dodaj Not po if.

Możesz to zrobić również za pomocą jednego If oświadczenie odchudzające ponownie kod.

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 dla odpowiedzi nr 2

Nie działa dobrze tutaj, musisz tylko zanegować pełne wyrażenie

If Not ws.Name Like "*" & "(2)" Then