Страницы: 1
RSS
Макрос скрывает или показывает нужные строки, если в первых ячейках написано слово "УБРАТЬ", почему тормозит макрос?
 
Здравствуйте, товарищи!

Макрос скрывает или показывает нужные строки, если в первых ячейках написано слово "УБРАТЬ". Активируется при активации листа. Лист зависает примерно на 3 секунды. Можно ли как-нибудь это дело ускорить?

Код
Sub hideSI()
Dim i As Long
Dim i2 As Long
Application.ScreenUpdating = False
With ActiveSheet
.Rows(96).Hidden = True
'Скрыть строки, где есть "УБРАТЬ"
    For i = 104 To 116
      If .Cells(i, 2) = "УБРАТЬ" Then
         .Rows(i).Hidden = True
      Else
         .Rows(i).Hidden = False
      End If
    Next
    For i2 = 121 To 434
      If .Cells(i2, 1) = "УБРАТЬ" Then
         .Rows(i2).Hidden = True
      Else
         .Rows(i2).Hidden = False
      End If
    Next
End With
    Application.ScreenUpdating = True
End Sub
 
Не проще ли фильтром скрывать, а не циклом?
 
Дело в том, что файл используется неопытными пользователями ПК. А выборка, что скрывать, а что нет не такая и простая и требует много времени и знаний.
 
Ну тогда запишите макрорекордером фильтр с тем что нужно и без того что нужно и назначьте на макрос.
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Я не думаю, что макрорекодером я бы смог сделать это... Нужно было побыстрее сделать, поэтому я не стал расписывать как всё устроено в файле. Но решил попытать удачу в то время, пока переписывал код. И вот, что получилось. Работает почти мгновенно, но код выглядит ужасно. Надеюсь правка в дальнейшем не понадобится... В любом случае, всем спасибо за отклик! =)
Скрытый текст
Изменено: Leork - 19.02.2020 20:55:38
 
У Вас для каждой строки из перебираемых изменяется признак скрытия/отображения независимо от необходимости. Попробуйте проверять необходимость скрытия,отображения (пример только для первого цикла):
Код
   For i = 104 To 116
      With .Rows(i)
        If .Cells(1, 2) = "УБРАТЬ" Then
           If Not .Hidden Then .Hidden = True
        Else
           If .Hidden Then .Hidden = False
        End If
      End With
    Next

И нет необходимости объявлять вторую переменную i2, если и i и i2 используются только в циклах, достаточно использовать одну (это, правда, не влияет на скорость).
Страницы: 1
Наверх