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

+В закладки

Обучение Excel

Макросы в Excel

Программирование в Excel

Как в 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 создать книгу доходов и расходов



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

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

А сейчас по порядку. Сам макрос называется 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.

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