Another way that is close to Paul's suggestion...
Give your range of cells that should be "protected" a nice name. (I used
Protected.)
Then right click on the worksheet tab that should have this behavior and select
View Code. Paste this in:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Me.Range("Protected")) Is Nothing Then
Exit Sub
End If
On Error GoTo errHandler:
With Application
.EnableEvents = False
.Undo
End With
errHandler:
Application.EnableEvents = True
End Sub
But both this suggestion and Paul's suffer from the same problem(s). If the
user opens the workbook with macros disabled (or just turns off event handling),
then it fails miserably.
===
Excel 2002 does have finer granularity on what you can allow on a protected
worksheet. And if you provided a macro that does the real work, you could let
the workbook allow the macro to do more than the user.
If you protect the worksheet in code, you can allow more stuff to happen. But
this setting is not persistent between workbook closings. You have to reset
each time you need it. Using workbook_open (or auto_open) makes it nice.
Option Explicit
Private Sub Workbook_Open()
Worksheets("sheet1").Protect Password:="hi", userinterfaceonly:=True
End Sub
===
And you could even just have your macro unprotect the worksheet, do the changes,
and reprotect the worksheet.