У Дэйва есть система Windows XP, на которой все еще установлена ​​старая версия Excel 97. В этой системе есть макрос, который используется для обработки информации на листе. Он может обработать 500 строк информации примерно за 12 секунд. На более новой машине, на которой выполняется Excel 2010 под Windows 7, выполнение того же макроса, работающего с теми же данными, занимает примерно 3-4 минуты. Обе машины имеют одинаковый объем памяти (4 Гб) и сопоставимые процессоры. Дэйв задается вопросом, почему макрос работает намного медленнее в новой версии Excel.

Очень сложно сделать что-либо, кроме самых общих комментариев, не видя кода, но это не значит, что сказать нечего. :>) Первое, что вам нужно сделать, это проверить, как ваш макрос выполняет свою работу. Например, проходит ли он по всем строкам рабочего листа для обработки? (Даже если макрос обрабатывает 500 строк информации, это не означает, что он не проходит через каждую строку на листе.) Причина, по которой это может быть критически важным, заключается в том, что более ранние версии Excel использовали только 65 000+ строк на листе, тогда как последние версии могут обрабатывать в 16 раз больше строк (более 1 000 000). Если раньше для выполнения макроса требовалось 12 секунд, то в 16 раз больше будет 192 секунды, что составляет от 3 до 4 минут.

Также есть сообщения о том, что Excel 2010 довольно регулярно обменивается данными с драйвером принтера, чего не было в предыдущих версиях Excel. Вы можете выяснить, замедляет ли это ваш макрос, отключив связь в начале вашего макроса:

Application.PrintCommunication = False

В конце макроса не забудьте вернуть для свойства значение True, чтобы Excel снова мог взаимодействовать с принтером.

Также может быть, что в новой машине есть что-то другое, даже если разница незначительная. Например, на новой машине могут быть запущены другие фоновые программы, чем на старой машине — от антивирусной программы до программного обеспечения для распознавания голоса. Кроме того, в нем могут быть загружены другие надстройки Excel, которых нет в более ранней системе. Вы не могли бы подумать, что такие вещи повлияют на производительность макросов, но они действительно могли. Вы, конечно, не узнаете, пока не отследите, что загружается, не отключите его, а затем снова попытаетесь запустить макрос.

Кроме того, возможно, что на новой машине есть некоторые внешние устройства, которые необходимо периодически опрашивать, что может замедлить работу. У меня в офисе есть система с внешним жестким диском, подключенным через порт USB. Иногда самой системе (Windows) необходимо отключиться и включить внешний диск, и при этом на компьютере все по существу останавливается. Виновные устройства могут быть USB-подключениями, сканерами, сетевыми дисками и т. Д. Это может сильно расстраивать, особенно когда замедляет работу, на что совсем не нужно много времени.

Хорошее предложение в этом случае — не полагаться исключительно на то, что вы обнаружите с помощью одной системы Excel 2010. Если у вас есть доступ к нескольким машинам — возможно, даже к некоторым вне офиса — попробуйте макрос на них, чтобы увидеть, что произойдет. Если он работает быстрее, то вы знаете, что в медленной системе 2010 года есть что-то невидимое.

Если вы обнаружите, что все действительно «одинаково», вам может потребоваться войти в редактор VB в системе и начать определять время для различных частей вашего макроса. Это утомительно, но может помочь вам сузить круг вопросов, в которых макрос застревает.

Если вы решите пойти по этому последнему пути, то обнаружите, что стоит потратить время на приобретение хорошего справочника программиста Excel VBA. На рынке их несколько, так что немного присмотритесь. (Вы не ошибетесь ни с чем, написанным Джоном Уокенбахом, и я слышал хорошие отзывы о Excel 2007 VBA Programmer’s Reference.)

_Примечание: _

Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.

link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

ExcelTips — ваш источник экономичного обучения Microsoft Excel.

Этот совет (12440) относится к Microsoft Excel 2010.