Поскольку листы по своей сути имеют числовое представление, вы можете переходить между листами одной рабочей книги с помощью цикла, например:
Dim i as long
For i = 1 to sheets.count
'do something using Sheets(i)
Next i
Что касается удаления листов, вы можете использовать вышеуказанное, включая:the .delete:
Dim i as long
For i = 1 to sheets.count
If Sheets(i).Range("A1").Value Like "?*@?*.?*" And Sheets(i).Name <> "A" Or Sheets(i).Name <> "B" Or Sheets(i).Name <> "C" Then Sheets(i).Delete 'note that this is in-line
Next i
Кроме того, если вы не хотите использовать цикл или просто хотите посмотреть текущий лист, вы можете использовать ниже для удаления:
ActiveSheet.Delete
Я бы порекомендовал записать имя листа в виде строки, прежде чем использовать его в своем операторе if, исключительно для скорости / эффективности (вероятно, не заметно для небольших кусков кода, но приличной практики), аналогично:
Dim shName as String
shName = ActiveSheet.Name
If Sheets(shName).Range("A1").Value Like "?*@?*.?*" And shName <> "A" Or shName <> "B" Or shName <> "C" Then
Это должно позволить VBA использовать уже сохраненную строку (выделенную память), а не возвращаться к имени каждый раз, когда выполняется вызов для того, чтобы найти это .name.