Да нет такого способа. Никак Вы не защитите лист от удаления. Даже если попытаться заблокировать все кнопки, отвечающие за удаление листа - выше приведенная одна строка кода все равно сделает свое дело. И неважно, из какой книги она будет вызвана.
| Цитата |
|---|
asesja написал: в данном проекте мне это не очень удобно |
думаете, что перехват события удаления листа будет проще?

Да, в новых версиях есть такое событие в книге:
Workbook_SheetBeforeDelete. Но вот в чем беда - если открыть проект в Excel более старой версии - событие не будет опознано и не сработает. Следовательно, вариант тоже не рабочий.
Поэтому я все же настоятельно рекомендовал бы грамотно организовать запрет удаления именно через защиту книги.
Например, в том же модуле ЭтаКнига:
| Код |
|---|
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Select Case Sh.Name
Case "Лист2"
Me.Protect "1"
Case Else
Me.Unprotect "1"
End Select
End Sub |
Но опять же - Activeworkbook.Sheets("Лист2").Delete - сработает без проблем, если активным в момент выполнения этой строки будет другой лист.