Ускоряем наши макросы в Excel  
Всё об Excel
Меню



Ускорение макросов

Не так давно написал хитрый макрос. Макрос небольшой, а работу делает огромную.

А сейчас по порядку. Сам макрос называется DeleteZeroRows – удалить нулевые строки. Основную работу выполняет функция deleteRows, которая проходит по всем листам книги. Если название листа удовлетворяет определённому требованию, то макрос на этом листе удаляет строки с нулевыми значениями. Всё просто!

Но хочу обратить Ваше внимание на две замечательные функции,которые я всегда теперь подключаю к проекту – это Prepare и Ended, - вне зависимости от сложности проекта. Суть этих функций записана в комментариях к ним – «Включить/Отключить ускоренную работу макросов».

Нашёл я эту парочку на просторах интернета и теперь никогда с ней не расстаюсь.

А началось всё, тогда, когда я выполнял большой проект по автоматизации. Если кратко, то это была обработка 24 книг Excel и одной базы данных с 6000+ записями. Так вот, когда я запускал разработанный макрос, то он останавливался через 2 минуты!!!, иногда казалось, что программа просто зависала, и  это всего лишь был тестовый запуск. Возможности увеличить производительность машины, на которой работал, у меня не было, пришлось искать другой выход. После подключения Prepare и Ended производительность увеличилась в 8 раз! Я был доволен, а функции сохранил у себя в надёжном месте с тем описанием, которые было к нему приложено.

Взглянем на применение этих функций на небольшом, как уже говорил, примере.

Sub DeleteZeroRows()

f1 = Prepare() 'Включить ускоренную работу макросов

start

f2 = Ended() 'Отключить ускоренную работу макросов

End Sub

Private Function start()

deleteRows

End Function

Private Function deleteRows()

For Each sh In ThisWorkbook.Worksheets'Перебор всех листов книги Excel

If (InStr(sh.Name, "R") And Len(sh.Name) = 4) Then'Условие для названия листа

i = 1

sh_name = sh.Name

Do While Sheets(sh_name).Cells(i, 3).Value <> ""

If Sheets(sh_name).Cells(i, 3).Value = 0 Then

Rows(i).Delete Shift:=xlUp 'Удалить строку

i = i - 1

End If

i = i + 1

Loop

End If

Next sh

End Function

'Уcкоряет работу макросов

Private Function Prepare()

Application.ScreenUpdating = False

Application.Calculation = xlCalculationManual

Application.EnableEvents = False

ActiveSheet.DisplayPageBreaks = False

Application.DisplayStatusBar = False

Application.DisplayAlerts = False

Prepare = 1

End Function

'Отключает ускорение

Private Function Ended()

Application.ScreenUpdating = True

Application.Calculation = xlCalculationAutomatic

Application.EnableEvents = True

ActiveSheet.DisplayPageBreaks = True

Application.DisplayStatusBar = True

Application.DisplayAlerts = True

Ended = 1

End Function

Описание Prepare.

1.Отключение обновление экрана.

2. Выключить расчет.

3. Отключает обработку событий.

4. Отображение границ страниц, тоже помогает.

5. Отключить статусную строку.

6. Отключение сообщений Excel.



Простой способ создать таблицу в Excel

Горячие клавиши, которые я использую в Excel

Как посчитать сумму в Excel

Показываю, как создать раскрывающийся список в Excel

Создадим раскрывающийся список Excel

Строим графики и диаграммы в Excel

Как быстро добавить строку или столбец в таблицу

Как изменить размер ячейки в Excel (4 способа)

Создаём полезный макрос в Excel

Макросы в Excel это просто

Строим график в Excel

Что такое Excel

Краткая сводка по любимому Excel

Ставим нумерацию листов (страниц) в Excel

Чем открыть dbf

Как построить график в Excel

Прибиваем шапку таблицы в Excel

Ссылки в Excel

Ставим пароли для защиты данных

Будем учиться программировать в Excel

Отвечаем на вопрос читателя

Ускоряем наши макросы в Excel

Объединяем ячейки в Excel

Xls файлы, чем открывать

Как можно создавать таблицы

Что такое dbf

Как в Excel создать книгу доходов и расходов

Меню
© 2012 - 2018 Всё об Excel
Яндекс.Метрика