там
Я провел небольшой тест, используя ваш код, и первое, что я заметил, это то, что вы установили Application.EnableEvents to False
, и вы не включили его снова, поэтому вы отменяете любое событие, напримерWorksheet_Change Event
после того, как это исправлено, событие будет срабатывать каждый раз, когда ячейка B18 изменяется, за исключением случаев, когда введенное значение исходит от вставки (не знаю, почему), но если вы используете метод Intersect, то это работает, даже если значение получено изкопия вставки.
Я сделал несколько небольших изменений в вашем коде, и я думаю, что теперь это работает.пожалуйста, просмотрите его и попробуйте.
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, ThisWorkbook.Sheets("Account Input").Range("B18")) Is Nothing Then
Call CountLoc
End If
End Sub
Public Sub CountLoc()
Dim LocCount As Long
Dim WsInput As Worksheet
Dim i As Long
Dim rng As Range
Set WsInput = Sheets("Account Input")
With WsInput
LocCount = .Cells(.Rows.Count, "B").End(xlUp).Row
End With
If LocCount > 35 Then
Set rng = WsInput.Range(WsInput.Cells(18, 2), WsInput.Cells(LocCount, 19))
With rng
.Interior.Color = RGB(220, 230, 241)
.Borders.LineStyle = xlContinuous
.Borders.Color = vbBlack
.Borders.Weight = xlThin
End With
For i = 18 To LocCount Step 2
Set rng = WsInput.Range(WsInput.Cells(i, 2), WsInput.Cells(i, 19))
rng.Interior.Color = vbWhite
Next i
Else
Exit Sub
End If
End Sub