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