Страницы: 1
RSS
Возможно ли ускорить работу макроса?
 
Добрый день!  
Подскажите пожалуйста, в документе реализована функция фильтрации данных через макрос.  
На листе есть кнопка, по нажатию на неё открывается форма предлагающая ввести текст для фильтрации. Далее макрос ищет строки в которых есть введённый текст и скрывает строки в которых он не найден. Макрос работает так как надо, кроме скорости. При наличии 300 строк макрос обрабатывает их где-то секунд 15, а при большем и того больше.  
Вопрос, можно ли как-то ускорить работу макроса:  
Private Sub OK_Click()  
   Application.ScreenUpdating = False  
   Application.EnableEvents = False  
Dim iRange As Range  
Dim lFifstRow As Long  
Dim iFifstColumn As Integer  
lFifstRow = Range("A2:F1000").Row  
iFifstColumn = Range("A2:F1000").Column  
lLastRow = Range("A2:F1000").Rows.Count + 3  
iLastColumn = Range("A2:F1000").Columns.Count  
Set iRange = Range(Cells(lFifstRow, iFifstColumn), Cells(lLastRow, iLastColumn))  
       Range("A2:F300").EntireRow.Hidden = False  
   With iRange  
       Set ifoundRng = .Cells.Find(What:="Текст для поиска", LookIn:=xlFormulas, LookAt:=xlPart)  
       Range(iRange.Address).EntireRow.Hidden = True  
       If Not ifoundRng Is Nothing Then  
           firstAddress = ifoundRng.Address  
       Do  
           Rows(ifoundRng.Row).Hidden = False  
           Set ifoundRng = .Cells.FindNext(ifoundRng)  
       Loop Until ifoundRng.Address = firstAddress  
       Else  
           MsgBox "Значение на листе не найдено!", vbExclamation, "Ошибка"  
           GoTo Exit_  
       End If  
   End With  
Exit_:  
   End If  
       Application.ScreenUpdating = True  
       Application.EnableEvents = True  
   Unload Me  
End Sub
 
Можно сделать всё моментально, если скрывать все найденные строки за один раз:  
http://excelvba.ru/code/ConditionalRowsDeleting
 
Не должно оно так тормозить. Может, там пересчет запускается после каждого скрытия-отображения? Попробуйте добавить  
 
   Application.ScreenUpdating = False  
   Application.EnableEvents = False  
   Application.Calculation = xlCalculationManual 'добавить  
'...  
   Application.ScreenUpdating = True  
   Application.EnableEvents = True  
   Application.Calculation = xlCalculationAutomatic 'добавить
 
{quote}{login=Казанский}{date=29.08.2011 12:03}{thema=}{post}Не должно оно так тормозить. {/post}{/quote}Я тоже так считаю: Find на 300 строк и 15 секунд - это перебор...
 
Спасибо огромное.
 
Да, дело было в пересчёте других листов при изменении текущего.  
Но макрос EducatedFool мне очень понравился. Спасибо.
Страницы: 1
Читают тему
Наверх
Loading...