A few tweaks to the above code, based on the way I read the requirement
I think the Change event goes in Sheet1, and I made it check Sheet2 B2 to see if the check box as on or off
Not sure, but it seems you always had Unprotected Sheet1
You'll need to play with this to get it final for your needs
Sheet1 Code
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Columns("B")) Is Nothing Then Exit Sub
If Target.Cells.Count > 1 Then Exit Sub
If Target.Row < 4 Then Exit Sub
If Len(Worksheets("Sheet2").Range("B2").Value) = 0 Then Exit Sub
Me.Unprotect Password:="123"
If Len(Target.Value) > 0 Then
Target.EntireRow.Locked = True
Me.Protect Password:="123"
End If
End Sub
Option Explicit
Sub CheckBox_Date_Stamp()
Dim xChk As CheckBox
Set xChk = ActiveSheet.CheckBoxes(Application.Caller)
With xChk.TopLeftCell.Offset(, 1)
Worksheets("Sheet2").Unprotect Password:="123"
If xChk.Value = xlOff Then
.ClearContents
Else
.Value = Date
End If
Worksheets("Sheet2").Protect Password:="123"
End With
End Sub