Вы не возвращаете отформатированную строку в коллекцию Sheets.
For Each ws In Worksheets
If ws.Name = Format(Date - 2, "MM-DD-YYYY") Then
Application.DisplayAlerts = False
Sheets(Format(Date - 2, "MM-DD-YYYY")).Delete '<~~ identified here
'alternate
'ws.delete
Application.DisplayAlerts = True
exit for '<~~ no point in continuing since only one worksheet could have that name
Нет смысла дважды создавать имя листа.Если он проходит проверку имени, то ws
- это лист, который вы хотите удалить.
Я начал думать о выходных и праздничных днях, которые могут помешать правилу «3 дня».При этом будет удален любой рабочий лист с именем в виде строковой даты, старше трех рабочих дней.
For Each ws In Worksheets
If cdate(ws.Name) <= APPLICATION.WORKDAY(Date, -3) Then
Application.DisplayAlerts = False
ws.delete
Application.DisplayAlerts = True
end if
NEXT WS