Страницы: 1
RSS
Упала скорость макроса
 
Привет, жители планеты Excel.
Почему-то "ни с того, ни с сего" упала скорость работы макроса. Вроде бы вчера бросил писать код - все было нормально, сегодня запускаю - тормоза... Команда Rows(l).EntireRow.Hidden = True выполнялась за момент нажатия F8, а теперь машина думает 1-2 секунды. А это ведь в цикле... Очень долго выполняется каждая строчка установки параметров страницы:
With ActiveSheet.PageSetup
       .LeftHeader = ""
       .CenterHeader = ""
       .RightHeader = "" и так далее
Обновление экрана отключено.
Подскажите, пожалуйста, хотя бы в каком месте посмотреть или проверить чего-нибудь...
 
Посмотрите,
http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=1&TID=49697
 
Отключение автоматических вычислений не помогло.
Как мелкий шажок - почему скрытие строки стало работать дольше? От чего это зависит?
 
скрытие строк и Calculation вроде как не зависят друг от друга.
Попробуйте Application.enableEvents = false в начале и  Application.enableEvents = true в конце кода
Учимся сами и помогаем другим...
 
Цитата
ber$erk пишет:
скрытие строк и Calculation вроде как не зависят друг от друга.
Попробуйте Application.enableEvents = false в начале и  Application.enableEvents = true в конце кода

Отключение событий тоже не помогло. Думаю, надо определить - это косяк макроса или железа.Могу отправить на почту файл, на закладке печать на смену кнопка Печать. Раньше работало по времени нажатия, теперь - 3-5 секунд. И время катастрофически возрастает, чем меньше данных на листе Гр_Отгр.
Может кто-нибудь попробует у себя запустить.

ps. Мой Касперский молчит...
 
шлите. почта в профиле
Учимся сами и помогаем другим...
 
Отправил.
Спасибо за беспокойство.
 
У меня как-то тоже была проблема.
Вначале макрос выполнялся довольно быстро. А потом вдруг раз и скорость упала практически в 5 раз.
Сначала грешил на железо.
А потом оказалось, что просто слишком много программных кодов было написано в книге.
Выделял макросы, переносил  на модули, старался с листов убрать различные коды.
Скорость  немного увеличилась.
Но сама проблема решилась только так:


В начале прописал:
Option Explicit
Option Base 0

А дальше всё по старому для ускорения:

'Больше не обновляем страницы после каждого действия
 Application.ScreenUpdating = False

 'Расчёты переводим в ручной режим
 Application.Calculation = xlCalculationManual

 'Отключаем события
 Application.EnableEvents = False

 'Не отображаем границы ячеек
 ActiveSheet.DisplayPageBreaks = False

 'Отключаем статусную строку
 Application.DisplayStatusBar = False

 'Отключаем сообщения Excel
 Application.DisplayAlerts = False
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Цитата
Caho пишет:
Option Explicit
Option Base 0

У меня пишет Invalid inside pocedure. Их что, нужно как то устанавливать или прописывать?

Сейчас убрал все другие макросы, на исходном листе убрал формулы. Перенес в новую книгу - скорость не увеличилась.
Изменено: aws1967 - 19.07.2013 14:54:53
 
Если прописываешь эти два оператора:
Option Explicit - необходимо явно объявлять все переменные с помощью инструкций Dim или ReDim. Включая даже те переменные которые ведут на какие-нибудь MsgBox или InputBox.
Option Base 0 - Оператор Option Base может указываться в модуле только один раз и должен предшествовать объявлениям массивов, включающим размерности. Обычно устанавливается когда хочется указать, что все переменные обнулены.
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Цитата
CAHO пишет:
Option Base может указываться в модуле только один раз и должен предшествовать объявлениям массивов, включающим размерности. Обычно устанавливается когда хочется указать, что все переменные обнулены.
На самом деле инструкция Option Base используется для изменения нижней границы индексов массива
 
Цитата
CAHO пишет: Option Explicit ... Option Base...
Сообщение про процедуру выдается на этапе компиляции, код даже не начинает выполняться. То есть такое сообщение может быть при непрописанных переменных?
Изменено: aws1967 - 20.07.2013 00:04:11
 
Юрий спасибо за поправку.
aws1967 скорее всего у Вас просто не описаны переменные.
http://vbabesaba.com/uroki/opisanie.htm - тут у меня показаны как описывать переменные, чтобы счастье было.  :D
Если у Вас вообще  никакие переменные не описаны, то не следует ждать скорости от макроса, так как все переменные по умолчанию Variant, а Это значит - Дооооолллгггооооо.
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Объявлять переменные и указывать их тип - это правильно. Но у автора ДРУГАЯ проблема: макрос работал быстро, и ВДРУГ стал работать медленно. Переменные, как я понял, принудительно не удалялись и их тип не сводился к Variant  :)
 
CAHO, читаем Правила и исправляем подпись.
 
у себя запускал макрос - работает 2-3 секунды. Видимо проблема не в коде.
Учимся сами и помогаем другим...
 
Да я в курсе Юрий.
Я выше писал, что у меня тоже похожая проблема была.
И я так и не понял почему вдруг упала скорость выполнения макроса.
При разработке программы всё нормально было. Потом спустя где-то 2 дня Юзанья У меня упала скорость выполнения макроса (причём на всех компах). Я был озадачен, откуда вдруг....
И мне помогло только отключение всякого мерцания (монитор, пересчёт и т.д.) чтобы снова повысить скорость.
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Цитата
Юрий М пишет: Но у автора ДРУГАЯ проблема...
Все правильно, сначала все летало, а потом вдруг.... Причем, такое у меня уже второй раз. Года два назад, стало вдруг тормозить форматирование ячеек. Тогда я проблему не победил, просто отказался от форматирования...
Переменные я действительно не описывал, попробую переделать чуть попозже.
 
Цитата
ber$erk пишет:
у себя запускал макрос - работает 2-3 секунды. Видимо проблема не в коде.

Этого я и боялся. Шайтан какой-то.
Ладно, попробую описать переменные и протереть экран у ноутбука...
 
Может у тебя там Торренты висят?  :D  Весь комп загрузили. А то я тоже бывает поставлю дефрагментацию, торренты на всю катушку и сижу макросы пишу со скоростью 1 буква в секунду  :D
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Еще попробуйте временно отключить антивирус.
Я сам - дурнее всякого примера! ...
 
Торрентов нет, а вот десятый касперский может... Хотя я смотрел загрузку процессора - 1-2%
 
CAHO, внимание на сообщение #15.
 
Попробуйте убирать отображение границ разрывов страниц после установки параметров печати:
ActiveSheet.DisplayPageBreaks = False
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Страницы: 1
Наверх