Прежде всего, прекратите защищать / снимать защиту листа каждый раз, когда что-то меняется.Поместите этот код в личную таблицу кодов рабочего листа вместе с Worksheet_Change и запустите его один раз.
private sub protectOnce()
me.Unprotect Password:="Anthem"
me.Protect Password:="Anthem", AllowFormattingRows:=True, UserInterfaceOnly:=True
end sub
Теперь вы можете делать все, что хотите, с рабочим листом с помощью VBA, не снимая с него защиту.Если у вас есть защита / снятие защиты где-либо еще, избавьтесь от нее сейчас;это не нужно.
Теперь перейдем к вашему актуальному вопросу.Просто ограничьте действие окна сообщения тем, что происходит при изменении диапазона («G50»), а не при изменении чего-либо, не связанного с этим.
Private Sub Worksheet_Change(ByVal Target As Range)
if not intersect(Range("G50"), target) is nothing then
If Range("G50").Value <> "" Then
MsgBox "You may now print"
Range("G50").Interior.Color = RGB(221, 235, 247)
end if
End If
End Sub