Переполнение стека почти наверняка происходит из-за рекурсии. Не уверен, почему вы не получаете переполнение стека в Excel 2003 - возможно, возникает ошибка перед переполнением стека.
Вы можете защитить от бесконечной рекурсии что-то вроде следующего:
Private m_bInChange As Boolean
Private Sub Worksheet_Change(ByVal Target As Range)
If m_bInChange Then Exit Sub
On Error GoTo ErrHandler
m_bInChange = True
If [E28] = "NO" Then
ActiveSheet.Unprotect ("PASSWORD")
[K47:K53].Locked = False
[K47:K53].Interior.ColorIndex = 16
[K47:K53].ClearContents
ActiveSheet.Protect ("PASSWORD")
Else
ActiveSheet.Unprotect ("PASSWORD")
[K47:K53].Interior.ColorIndex = 0
'Next line is optional, remove preceding apostrophe if protection should stay on.
ActiveSheet.Protect ("PASSWORD")
End If
m_bInChange = False
Exit Sub
ErrHandler:
m_bInChange = False
Exit Sub
End Sub