Измените With ActiveSheet
на With Me
, а также укажите Me
для Range
, как Me.Range
(или заставьте его использовать оператор with и начните его с точки, такой как .Range
).
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.ScreenUpdating = True
With Me
.Cells.Interior.ColorIndex = xlNone
If Target.Rows.Count = 1 Then
.Range("A" & Target.Row, "J" & Target.Row).Interior.ColorIndex = 27
End If
End With
End Sub
Почему это важное различие?
ActiveSheet
- это лист, который имеет фокус (находится сверху) в момент запуска кода.Но это не обязательно тот лист, который вызвал событие, или Target
. Поэтому вы пытаетесь изменить цвет другого листа.Избегайте использования ActiveSheet
любой ценой.В большинстве случаев это не требуется (если только в редких случаях, например, если вы пишете надстройку или что-то подобное).
Возможно, вам будет полезно прочитать Как избежать использования Select в Excel VBA , которыйо очень похожей теме.