Страницы: 1
RSS
Оптимизировать код по отображению/скрытию определенных строк
 
Уважаемые гуру, помогите оптимизировать код. Имеется:

Код
Private Sub Worksheet_Change(ByVal Target As Range)
 Application.ScreenUpdating = False
 Rows("89:400" )  .EntireRow.Hidden = True
 
 If Not Intersect(Target, Range("B89" )  ) Is Nothing Then
 If Target.Value = 0 Then
 Rows("89:127" )  .EntireRow.Hidden = True
 Else
 Rows("89:127" )  .EntireRow.Hidden = False
 End If
 End If
 
 If Not Intersect(Target, Range("B128" )  ) Is Nothing Then
 If Target.Value = 0 Then
 Rows("89:166" )  .EntireRow.Hidden = True
 Else
 Rows("89:166" )  .EntireRow.Hidden = False
 End If
 End If
 
 End If
 Application.ScreenUpdating = True
End Sub


условий подобных
If Not Intersect(Target, Range("B89" )  ) Is Nothing Then
If Target.Value = 0 Then
Rows("89:127" )  .EntireRow.Hidden = True
Else
Rows("89:127" )  .EntireRow.Hidden = False
End If
End If
у меня не 2, а 8 и, я так понимаю, что данный вариант кода очень далеко не оптимален, ведь их могло бы быть и 80 или еще больше. Как оптимизировать данную часть кода? И еще, как в подобном коде (задача там полностью аналогична, при заполнении ячеек должны отображаться/скрываться определенные строки), на этой же странице указать "проверочную" ячейку не как:
If Not Intersect(Target, Range("B128" )  ) Is Nothing Then
а на ДРУГОМ листе данного файла . Заранее спасибо всем откликнувшимся
 
вот тут удачный код по скрытию и удалению срок по условию.
Мне нравиться, много где использую, может и Вам пригодиться. Автор EducatedFool
 
С ДРУГИМ листом Вы что-то "не в ту степь"... Тут проверяется, какая ячейка изменена на ЭТОМ листе. Когда будете менять на ДРУГОМ, там нужен аналогичный код.
 
Hugo, я правильно Вас понял, что на ДРУГОМ листе необходимо выставить условие, а вот скрываемые строки указать приблизительно как:
Sheets("Лист2" )  .Rows("89:127" )  .EntireRow.Hidden = False Так?
А по первой части вопроса, неужели код не оптимизируется? (он и так работает конечно, но я посчитал, что простто перечислением n-го количества условий настоящие профи не пишут и хотел узнать как код выглядит более правильно)
 
Цитата
Alex пишет:
но я посчитал, что простто перечислением n-го количества условий настоящие профи не пишут
А как они пишут, если для разных ячеек условия разные? Написать можно и иначе, но все равно все условия проверять надо.
 
Вот один из вариантов кода, во вложении пробуйте ставить ноль в желтых ячейках.

Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim r As Range, i As Long

    ReDim arr(1 To 3, 1 To 2)

    ' Заполняем массив проверяемых ячеек и соответствующих им строк
    ' для скрытия или отображения

    arr(1, 1) = "A1": arr(1, 2) = "2:9"
    arr(2, 1) = "A10": arr(2, 2) = "11:15"
    arr(3, 1) = "A16": arr(3, 2) = "17:19"

    For i = 1 To UBound(arr, 1)
        Set r = Range(arr(i, 1))
        If Not Intersect(Target, r) Is Nothing Then
            Rows(arr(i, 2)).Hidden = r.Value = 0
        End If
    Next i
End Sub
Редко но метко ...
 
Цитата
RAN пишет:
Цитата
Alex пишет:
но я посчитал, что простто перечислением n-го количества условий настоящие профи не пишут
А как они пишут, если для разных ячеек условия разные? Написать можно и иначе, но все равно все условия проверять надо.
Да я ни в коем случае не против, просто думал что мой вариант сильно неоптимален, хотел улучшить :)
Страницы: 1
Читают тему
Наверх