Чи обмеження розміру 64 кб для модулів, що псують макроси для excel 365?


1

У мене випадкові макропошкодження, де я не можу відкрити робочу книжку.

Мені доведеться вимкнути всі макроси без сповіщень, потім відкрити робочу книгу і перекомпілювати макроси, зберегти закрити. Потім увімкнено макроси та відкрийте робочу книжку, тоді робоча книжка відкриється нормально. Це майже як оновлення макросів допомагає знову відкрити робочий зошит. Я перевірив деякі мої модулі, а кілька - понад 64 кбіт. Я прочитав деякі статті, що стосуються обмеження розміру модуля, що спричиняє корупцію.

Хтось перевірить, чи є це також у програмі excel 365 чи якісь причини, щоб макроси могли пошкодитися?


4
Пишіть менші модулі? Читайте про згуртованість та такі принципи, як " Єдина відповідальність" - ваш код буде простішим в обслуговуванні, і ви не будете мати справу з обмеженнями розміру модуля.
Матьє Гіндон

ну, справа в тому, що мені просто цікаво, чи може це бути фактором, щоб мої макроси псувались? Також відмінно закривається випадково, коли копіювати, вставляти текст на інші аркуші в робочій книжці, викликаючи ту саму макрокорупцію.
ThisGuyJustNeedsHelp

Я прочитав деякі статті, що стосуються обмеження розміру модуля, що спричиняє корупцію - внутрішній формат зберігання не змінився за 20 років, що змушує вас думати, що O365 щось із цього змінює? Межі тут не проблема ...
Матьє Гіндон

FWIW обмеження в 64 Кб не на експортованому розмірі файлу / вихідному текстовому коді, а на складеному p-коді у внутрішній пам’яті.
Матьє Гіндон

Відповіді:


1

Ліміт 64 Кб не на розмір експортованого файлу, це максимальний розмір складеного модуля.

Якщо ваш модуль менше 10 К рядків, якщо його можна скласти.

Важким, але ймовірно, все-таки здоровим модулем будуть 1К рядки, вершини - які, здається, коливаються близько 40 КБ, коли експортуються в текстовий файл; 64KB не дивує мене , як зовсім непристойно, хоча це , безумовно , вище 1К рядків коду, і , таким чином, ймовірно , може використовувати деякі хитрощі.

Якщо ваші модулі названі , наприклад , Module8або Utilities, перевірити , як згуртовані їх члени - це все , що пов'язано з тією ж функціональністю? Або це відчуває, як випадкові функції скидалися туди?

Шукайте повторний код, переробляйте його. Витягуйте методи, параметризуйте їх, спостерігайте за тим, як ваш модуль плавиться, зберігаючи всю свою функціональність.

Внутрішня механіка зберігання коду VBA не змінилася за 20 років - я не бачу причини, щоб це змінилося останнім часом, тим більше, що VBA зараз сильно заморожений, а змінити все, що в механіці зберігання може зламати мільйони речі скрізь.

Але, це не неможливо, що нещодавно в O365 було змінено (ви використовуєте збірку Insider ?), І щось зламалось, і ваша робоча книжка якось пошкодилася .... але якщо ваш модуль трохи вище 64 Кб вихідного тексту тексту , це дуже навряд чи пов’язані: компільований код був би набагато меншим, ніж той ... якщо припустити, що компілюється проект.


Всі мої модулі при експорті мають менше 64 КБ та кілька розміром 100 КБ. Робочий зошит лише випадковим чином пошкоджується. Іноді копіювання пасти з аркуша на аркуш у робочій книжці призводить до збоїв у програмі excel. Потім після повторного відкриття однієї і тієї ж робочої книги вся книга пошкоджена, і я повинен виконати процес, зазначений у своєму пості, щоб перекомпілювати макроси, щоб мати змогу знову відкритись, і все працює добре.
ThisGuyJustNeedsHelp

Розмір файлу не має значення, має значення лише кількість рядків (розмір пам’яті ніде не відображається).
Матьє Гіндон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.