Приведет ли ограничение размера модулей в 64 КБ к повреждению макросов для Excel 365?

Приведет ли ограничение размера модулей в 64 КБ к повреждению макросов для Excel 365?

У меня возникают случайные повреждения макросов, из-за которых я не могу открыть книгу.

Мне пришлось бы отключить все макросы без уведомлений, затем открыть книгу и перекомпилировать макросы, сохранить и закрыть. Затем включить макросы и открыть книгу, после чего книга открывается нормально. Это почти как обновление макросов, которое помогает снова открыть книгу. Я проверил некоторые из своих модулей, и несколько из них превышают размер 64 КБ. Я прочитал несколько статей, касающихся ограничений размера модулей, которые вызывают повреждение.

Кто-нибудь проверил, применимо ли это также к Excel 365 или есть ли какие-то причины повреждения макросов?

решение1

Ограничение в 64 КБ касается не размера экспортируемого файла, а максимального размера скомпилированного модуля.

Если ваш модуль содержит менее 10 тыс. строк, его можно скомпилировать.

Тяжелый, но, вероятно, все еще работоспособный модуль будет иметь размер не более 1 тыс. строк — это, кажется, колеблется около 40 КБ при экспорте в текстовый файл; 64 КБ не кажутся мне чем-то совсем уж неприличным, хотя этоявляетсяопределенно превышает 1 тыс. строк кода, поэтому, вероятно, потребуется внести некоторые изменения.

Если ваши модули названы, например Module8, или Utilities, проверьте, каксплоченныйих члены - это все связано с одной и той же функциональностью? Или создается ощущение, что туда напихали случайные функции?

Найдите повторяющийся код, выполните его рефакторинг. Извлеките методы, параметризуйте их, наблюдайте, как ваш модуль тает, сохраняя при этом всю свою функциональность.

Механизм внутреннего хранения кода VBA не менялся уже 20 лет. Я не вижу причин, по которым он мог бы измениться в последнее время, особенно с учетом того, что VBA сейчас практически заморожен, а любое изменение механизма хранения сломает миллионы вещей повсюду.

Но не исключено, что что-то в O365 недавно изменилось (используете ли выИнсайдерсборка?), и что-то сломалось, и ваша рабочая книга каким-то образом была повреждена.... но если ваш модуль немного больше 64 КБисходного текста кода, то это вряд ли связано: скомпилированный код будет намного меньше... при условии, что проект скомпилируется.

решение2

Лимит составляет 64К напроцедура. Цитата изПроцедура слишком большая

При компиляции код процедуры не может превышать 64К. Эта ошибка имеет следующую причину и решение:

  • Код для этой процедуры превышает 64К при компиляции. Разбейте эту и любые другие большие процедуры на две или более меньших процедур.

Я использую файл VBA размером 811 КБ в Access 2013. Он содержит множество небольших процедур и никогда не вызывал никаких проблем.

Итак, отвечая на вопрос OP: если у вас где-то в проекте есть гигантская подпрограмма, разбейте ее. В противном случае, размеры модулей, о которых вы сообщаете, не должны вызывать беспокойства.

Связанный контент