CodeNameプロパティ

シートオブジェクトを、Worksheets("Sheet1")、Sheets("Sheet1")などと記述しますが、シート名を変更した場合に修正が必要となります。
 Visual Basic Editor のプロジェクトエクスプローラにシートの一覧があります。デフォルトではSheet1(Sheet1)ですが、プロパティウィンドウのオブジェクト名を、例えばMenuとすると右のようになり、これでシートオブジェクトをMenuと記述できます。
 編集中のブック全体をあらわすThisWorkbookオブジェクトも同様の使い方ができます。もちろんデフォルトのままでもかまいませんが、用途ごとに使い分けた方が分かりやすいでしょう。

Sub 日付を入力()
  Menu.Range("A1").Value = Date
End Sub

Sub Menu以外のシート保護を解除する()
  Dim Sh As Object
  For Each Sh In Sheets
    If Sh.CodeName = "Menu" Then
      Sh.Protect
    Else
      Sh.Unprotect
    End If
  Next
End Sub

すっきりとした記述になりました。また、ユーザーがシート名を変更してもエラーがなくなります。