OK, I found a solution to the problem with running the code on a protected sheet. Starting the macro with unprotecting the sheet seems to cause the macro to not run correctly, but if I unprotect it in the selection change event rater than in the change event where the main code is located, it works fine:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim celcurr As Excel.Range
Debug.Print Target.Address
Debug.Print ActiveCell.Address
Debug.Print Selection.Address
If Target.Cells.Count = 1 Then
Application.EnableEvents = False
For Each celcurr In Selection.Cells
Debug.Print celcurr.Address, celcurr.Value
If celcurr <> Target Then
celcurr.Value = Target.Value
End If
Next celcurr
Application.EnableEvents = True
End If
ActiveSheet.Protect Password:="ab"
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ActiveSheet.Unprotect Password:="ab"
End Sub