Запуск больших макросов (Microsoft Excel)
Некоторое время назад я разговаривал с коллегой, и он описал проблему, с которой он столкнулся с макросом, работающим в очень мощной компьютерной системе.
Кажется, что макрос всегда вылетал из строя и зависал компьютер, всегда с ошибкой нехватки памяти. Мой коллега подумал, что если бы макрос мог работать в фоновом режиме, он не использовал бы так много ресурсов и не аварийно завершил бы работу.
Однако я знал, что предлагаемое решение не обязательно решит проблему. Хотя это может освободить некоторые ресурсы, в конечном итоге системе все равно не хватит памяти. Зачем? Потому что проблемы нехватки памяти обычно возникают из-за проблем с кодированием в исходном макросе.
«Утечки памяти» (которые приводят к нехватке памяти) могут быть вызваны любым количеством проблем в коде макроса.
Лучшее решение — это ночная отладка, пошаговая обработка кода макроса и анализ того, где закрадывается проблема. Сначала ищите наиболее очевидные (но легко упускаемые из виду) проблемы, такие как бесконечные циклы. Если макрос выполняет много повторяющейся обработки (цикл по рабочим листам), убедитесь, что вы освобождаете всю память, которую вы объявляете для своего макроса. Например, для каждого используемого оператора SET у вас должен быть соответствующий оператор, устанавливающий для объекта значение НИЧЕГО, и эти операторы должны находиться внутри цикла.
Если вы можете пошагово выполнять макросы без их сбоев, то велика вероятность, что проблема заключается в какой-то проблеме синхронизации в потоках — проблема синхронизации, которая, конечно, проявляется только тогда, когда макрос работает на полном ходу. свой собственный. Если вы подозреваете, что это проблема, возможно, изменение последовательности событий в макросе поможет обойти ее.
Если макрос использует DDE, вы должны знать, что Microsoft рекомендует использовать автоматизацию OLE вместо DDE. Проблемы с синхронизацией довольно распространены для DDE, и теперь Microsoft считает его устаревшим и слишком ненадежным для исправления (то есть они не будут его поддерживать). В VBA множественные вызовы подпрограммы также могут вызвать утечку памяти, и такие подпрограммы должны быть переписаны как определяемые пользователем функции.
Вы также должны убедиться, что все ссылки на переменные полностью объявлены. Я видел несколько сообщений о том, что макросы «путаются» между листами, и даже если вы используете Alt + Tab для удаления фокуса из Excel.
_Примечание: _
Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.
link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера]
.
ExcelTips — ваш источник экономичного обучения Microsoft Excel.
Этот совет (2579) применим к Microsoft Excel 97, 2000, 2002 и 2003.