Protect с UserInterfaceOnly:=True разрешает коду писать в Locked-ячейки, пока сессия открыта. После закрытия книги флаг сбрасывается — накладывайте защиту в Workbook_Open.
Защитить лист так, чтобы макрос всё ещё писал
После Protect запись из VBA даёт 1004.
Код
Private Sub Workbook_Open()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Отчёт")
ws.Protect Password:="demo", UserInterfaceOnly:=True, Contents:=True
End Sub