Я борюсь со скоростью, с которой выполняется следующий код VBA.
Цель этого кода - активировать всякий раз, когда изменяется «C4», а затем сканировать столбец «R» на значение «Y». Если есть буква «Y», то она скрывает строку, а если нет - скрывает строку. Код работает, он просто не быстрый - для 500 строк это может занять 30 или более секунд каждый раз, когда я меняю значение «C4».
У кого-нибудь есть предложения по улучшению скорости выполнения этого кода? Или другой способ сделать это?
Спасибо, что заглянули.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim L As Long
Dim r As Range
L = Cells(Rows.Count, "R").End(xlUp).Row
If Not Intersect(Target, Range("C4")) Is Nothing Then
For Each r In Range("R2:R" & L)
If r.Value = "Y" Then
Rows(r.Row).Hidden = True
Else
Rows(r.Row).Hidden = False
End If
Next
End If
End Sub
Пытаясь применить приведенное ниже предложение - используйте Union () - я пришел с приведенным ниже неработающим кодом. Любая помощь будет принята с благодарностью.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim L As Long
Dim r As Range
Dim RowsToHide As Range
Dim RowsToUnhide As Range
L = Cells(Rows.Count, "R").End(xlUp).Row
If Not Intersect(Target, Range("C4")) Is Nothing Then
For Each r In Range("R2:R" & L)
If r.Value = "Y" Then
RowsToHide = Union(RowsToHide, r.Row)
Else
RowsToUnhide = Union(RowsToUnhide, r.Row)
End If
Next
End If
RowsToHide.Hidden = True
RowsToUnhide.Hidden = False
End Sub