Problem arrises because your enable events condition is in the wrong place and you have not reset it to true.
I dont know why you would want to use protect in this routine
Try this
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 4 Then Exit Sub 'only works in Columns D
If Target.Count > 1 Then Exit Sub
If Intersect(Target, Cells(4, 4)) Is Nothing Then Exit Sub
Application.EnableEvents = False
'ActiveSheet.Protect Password:="test", userinterfaceonly:=True
Cells.Columns.Hidden = False
Select Case Cells(4, 4).Value
Case "CM", “LR”, “MG”, “NR”
Columns("U:AI").Hidden = True
Columns("AP:BJ").Hidden = True
Columns("BQ:CQ").Hidden = True
End Select
Select Case Cells(4, 17).Value
Case "Excessive time charges"
Columns("AM:BP").Hidden = True
Case "Failure to produce documentation"
Columns("AJ:AL").Hidden = True
Columns("BK:BP").Hidden = True
Case "Not an eligible benefit"
Columns("AJ:AO").Hidden = True
Columns("BN:BP").Hidden = True
Case "Overcharged"
Columns("AJ:BM").Hidden = True
Case Else
Columns("U:CQ").Hidden = True
End Select
Application.EnableEvents = True
End Sub
Bookmarks