Это другой подход.Так как вы не хотите удалять последний день каждого месяца и похоже, что все листы одинаковы:
Option Explicit
Sub Delete_Sheets()
Dim ws As Worksheet, Month As Date, DontDelete As String, Yr As Integer
StartAgain:
On Error Resume Next
Yr = InputBox("Use YY format only.", "Which year to keep?", 18)
On Error GoTo 0
If Yr = 0 Then
MsgBox "You didn't enter a valid value. Please Try Again"
GoTo StartAgain
End If
Application.ScreenUpdating = False
Application.DisplayAlerts = False
For Each ws In ThisWorkbook.Worksheets
If Not ws.Name Like "??.??.??" And ThisWorkbook.Sheets.Count > 1 Then
ws.Delete
GoTo NextSheet
End If
Month = DateSerial(Yr, Mid(ws.Name, 4, 2), 1)
DontDelete = Format(Application.EoMonth(Month, 0), "dd.mm.yy")
If Not ws.Name = DontDelete Then
ws.Delete
End If
NextSheet:
Next
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
Редактировать: я отредактировал некоторый код, но он не может выдать ошибку.Теперь он не должен удалять некоторые листы, которые он сделал.Но вы никак не можете получить сообщение об ошибке.
Вот результат кода:

