|
>ブックの保護をしてなんとか誤魔化しています
いや、それは誤魔化すということでなく、的確な方法だと思いますよ。
Protect する対象に、シート名だけを選ぶことは出来ませんから。
なので "もしシート名を変更されても、何らかのタイミングで元に戻す"
という発想で対応するしかないでしょうね。例えば ThisWorkbook モジュールに
Private ShN() As String
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim i As Integer
With ThisWorkbook.Worksheets
For i = 1 To .Count
If .Item(i).Name <> ShN(i) Then
.Item(i).Name = ShN(i)
End If
Next i
End If
Erase ShN
ThisWorkbook.Save
End Sub
Private Sub Workbook_Open()
Dim i As Integer
With ThisWorkbook.Worksheets
ReDim ShN(1 To .Count)
For i = 1 To .Count
ShN(i) = .Item(i).Name
Next i
End With
End Sub
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
Dim Ind As Integer
Ind = Sh.Index
If Sh.Name <> ShN(Ind) Then Sh.Name = ShN(Ind)
End Sub
というマクロを入れて一端ブックを閉じ、再度開いてシート名を変更
してみて下さい。
|
|