You can prevent the user from event attempting to unprotect with:
<font face=Tahoma><SPAN style="color:#00007F">Sub</SPAN> DisableProtection()
Application.CommandBars("Tools").Controls.Item("Protection").Enabled = <SPAN style="color:#00007F">False</SPAN>
<SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">Sub</SPAN>
<SPAN style="color:#00007F">Sub</SPAN> EnableProtection()
Application.CommandBars("Tools").Controls.Item("Protection").Enabled = <SPAN style="color:#00007F">True</SPAN>
<SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">Sub</SPAN>
</FONT>
when or how to put the code what you supply ? because I have 31 sheets on this file ?
As for where to put the code, open the VB Editor (ALT+F11), then goto Insert-->Module and paste the code in the new window that opens on the right. You can call it from Tools-->Macro-->Macros or hit F5 from within any procedure. The first code will protect all of your worksheets regardless of how many there are.
Here is some code that will test for worksheet structure and if it's been unprotected it will close without saving (just read the comments):
<font face=Tahoma><SPAN style="color:#00007F">Private</SPAN> <SPAN style="color:#00007F">Sub</SPAN> Workbook_SheetSelectionChange(<SPAN style="color:#00007F">ByVal</SPAN> Sh <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">Object</SPAN>, <SPAN style="color:#00007F">ByVal</SPAN> Target <SPAN style="color:#00007F">As</SPAN> Range)
<SPAN style="color:#007F00">' If this works the way that you want it you can change the Message Box</SPAN>
<SPAN style="color:#007F00">' to indicate that the user is bad and the workbook will close wihout saving changes</SPAN>
<SPAN style="color:#007F00">' Then uncomment the ActiveWorkbook.Close False lines</SPAN>
<SPAN style="color:#00007F">If</SPAN> <SPAN style="color:#00007F">Not</SPAN> ActiveSheet.ProtectContents <SPAN style="color:#00007F">Then</SPAN>
MsgBox "Sheet is not Protected", , "Protection Status"
<SPAN style="color:#007F00">' ActiveWorkbook.Close False</SPAN>
<SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">If</SPAN>
<SPAN style="color:#00007F">If</SPAN> <SPAN style="color:#00007F">Not</SPAN> ActiveWorkbook.ProtectWindows <SPAN style="color:#00007F">Then</SPAN>
MsgBox "Workbook Windows not Protected", , "Protection Status"
<SPAN style="color:#007F00">' ActiveWorkbook.Close False</SPAN>
<SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">If</SPAN>
<SPAN style="color:#00007F">If</SPAN> <SPAN style="color:#00007F">Not</SPAN> ActiveWorkbook.ProtectStructure <SPAN style="color:#00007F">Then</SPAN>
MsgBox "Workbook Structure is not Protected", , "Protection Status"
<SPAN style="color:#007F00">' ActiveWorkbook.Close False</SPAN>
<SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">If</SPAN>
<SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">Sub</SPAN>
</FONT>
That particular piece of code goes in the ThisWorkbook module.
Smitty
EDIT: Note that if you're relying on code to keep people honest, then remove any additional temptation and protect the VBA project. In the VBE goto Tools-->VBA Project Properties-->Protection-->Lock Project for Viewing.