Проблема в том, что
If (Cells(RowCnt, ChkCol)(.Value = "Closed late")) And (.Value = "Closed on time") Then
не является допустимым синтаксисом.Это должно быть
If Cells(RowCnt, ChkCol).Value = "Closed late" And Cells(RowCnt, ChkCol).Value = "Closed on time") Then
Тем не менее, я рекомендую следующие улучшения:
С Intersect(Target, Target.Parent.Range(Cells(BeginRow, ChkCol), Cells(EndRow, ChkCol)))
вы можете убедиться, что ваш код работает только в измененных ячейках в столбце 14. Поэтому вы не можетецикл через ненужные неизмененные ячейки.
Также я рекомендую активировать Option Explicit
: в редакторе VBA перейдите на Инструменты › Параметры › Требуется декларация переменной .
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim BeginRow As Long
BeginRow = 3
Dim ChkCol As Long
ChkCol = 14
Dim EndRow As Long
EndRow = 700 'could be replaced with dynamic solution below
'EndRow = Target.Parent.Cells(Target.Parent.Rows.Count, ChkCol).End(xlUp).Row
Dim ChangedCells As Range
Set ChangedCells = Intersect(Target, Target.Parent.Range(Cells(BeginRow, ChkCol), Cells(EndRow, ChkCol)))
If Not ChangedCells Is Nothing Then
Dim Cell As Range
For Each Cell In ChangedCells
If Cell.Value = "Closed late" Or _
Cell.Value = "Closed on time" Then
Cell.EntireRow.Hidden = True
End If
Next Cell
End If
End Sub