まず、下記コードを標準モジュールに配置してください。
'-----------------------------------------------------------------------------
' 標準モジュール
'-----------------------------------------------------------------------------
Option Explicit
'-----------------------------------------------------------------------------
' グローバル変数
'-----------------------------------------------------------------------------
Public IsDelBlock As Boolean ' WBモジュールでシートの誤削除防止処理の多重発火防止用変数
'-----------------------------------------------------------------------------
' シート関係定数(TopSheet向け)
'-----------------------------------------------------------------------------
Public Const TopSheet As String = "目次" ' 請求情報をまとめたデータを取り扱うメインシート名
Public Const InputPDFSheet As String = "PDF取込" ' 指定されたファイルの情報を書き込むシート名
'-----------------------------------------------------------------------------
' 配列の初期化に関する関数(定数用)
'-----------------------------------------------------------------------------
' 削除禁止シート名を返す関数
' 本配列の最後にあるシートを発見した際にB列の10~30行目あたりのセルを自動選択するような内部処理がある可能性が高いため"hoge"を残す方針とした。(""の空白では対策不可だった)
Public Function GetBlockList() As Variant
Dim blockList As Variant
blockList = Array(TopSheet, InputPDFSheet, "hoge")
GetBlockList = blockList
End Function
' 誤削除防止用関数(WBモジュール用)
Public Sub ブック保護の解除()
ThisWorkbook.Unprotect
IsDelBlock = False
End Sub
その次に下記に記載するコードをワークブックモジュールに配置してください
'-----------------------------------------------------------------------------
' wbモジュール
'-----------------------------------------------------------------------------
'いずれかのシートを削除した時
Private Sub Workbook_SheetBeforeDelete(ByVal Sh As Object)
If IsDelBlock = True Then Exit Sub
Dim blockList As Variant
blockList = GetBlockList() ' 本配列の最後にあるシートを発見した際にB列の6~30行目あたりのセルを自動選択する内部処理になっている可能性が高いため"hoge"を残す方針とした。(""の空白での対応は不可だった)
Dim v As Variant
For Each v In blockList
If Sh.Name = v Then
' 削除禁止
MsgBox "削除禁止シートが含まれているため、ブックを保護して削除を停止します。", vbExclamation
' ブック構造を保護して削除を物理的に不可能にする
ThisWorkbook.Protect Structure:=True
IsDelBlock = True ' 多重発火防止
' 少し後に解除(削除操作はキャンセルされる)
Application.OnTime Now + TimeValue("0:00:01"), "ブック保護の解除"
Exit Sub
End If
Next v
End Sub
このコードでGetBlockList関数に登録したシート名があれば削除を防止できます。
必要に応じて変更してください。