Страницы: 1
RSS
Причины изменения размера файла vbaProject.bin
 
Добрый день!

Есть две идентичные книги: Книга1 и Книга2 (копия Книги1). Размер книг по 505 Кб.

Мои действия:
1. Открыл Книгу2 (при открытии книги не пересчитываются). Открыл редактор VBA, зашёл на один из листов. В листе 20 строчек кода. Выделил код и закомментировал. Закрыл редактор. Сохранил Книгу2 и закрыл. Размер Книги2 уменьшился до 492 Кб.

2. Открыл Книгу2. Открыл редактор VBA, зашёл на тот же лист. Выделил закомментированный код, раскомментировал его. Закрыл редактор. Сохранил Книгу2 и закрыл, т.е. фактически вернул Книгу2 в первоначальный вид. Размер Книги2 стал 494 Кб, т.е. уменьшился на 11 Кб от первоначального значения.

3. Из Книги1 (505 Кб) и Книги2 (494 Кб) создал два архива. Распаковал архивы. В каждом архиве по 262 файла. Сравнил файлы. Различия по размеру только в одном файле: vbaProject.bin. В Книге1 - 533 Кб, в Книге2 - 490 Кб. Разница составляет 43 Кб.

В чём причина такого изменения размера файла vbaProject.bin? Фактически ничего не изменилось: код в Книге1 идентичен коду в Книге2; ни каких различий в работе книг не обнаружено. Почему же меняется размер файла и соответственно размер книги?
 
Добрый день! Этот эффект хорошо известен, причины вряд ли кто-то точно объяснит, кроме самих разработчиков.
Самый эффективный метод борьбы с разрастанием объема проекта - экспортировать формы и модули в текст, удалить их, импортировать из текста. Есть готовые утилиты для этого, например, здесь.

Мы периодически чистим свои надстройки, объем после такого "субботника" может уменьшиться раза в два.
Эффект из #1 может возникнуть, например, в ситуации, когда исходные тексты были откомпилированы, Вы их изменили и сохранили книгу без компиляции.
Изменено: sokol92 - 01.03.2020 15:27:41
Владимир
 
Цитата
А мужики-то не знают
Владимир, можно подробнее - насколько критично наличие такого мусора, какие проблемы могут возникнуть?
Как я понял. лишнее копится только при работе с кодом. Книги, которыми пользуются без изменений в редакторе (ну, и без программного изменения в модулях), такому не подвержены. Правильно?
 
Цитата
sokol92 написал:
Мы периодически чистим свои надстройки
Т.е. я понял это так, что при написании кода в файле vbaProject.bin накапливается "мусор", который можно удалить без потери функциональности.
Случайно заметил, что комментируя код и сохраняя книгу, а затем восстанавливая код и снова сохраняя книгу размер книги уменьшается. Можно ли считать такие действия методом очистки кода от "мусора"? При каких ещё манипуляциях с кодом возможна очистка от "мусора"?
Изменено: Evgenyy - 01.03.2020 15:33:54
 
Я никогда (увы, или к счастью) не доводил ситуацию до проблемной, всегда чистил указанным образом (рано или поздно). Бывали случаи, когда объем уменьшался и в 3 раза.
Изменения ячеек книги на объем кода, насколько я понимаю, не влияют. Компиляция влияет почти всегда.
У нас есть одна главная надстройка и пара десятков специализированных, которые загружаются главной по необходимости. Думаю, что максимальный разумный объем одной надстройки - 2 МБ.
Изменено: sokol92 - 01.03.2020 15:39:29
Владимир
 
Цитата
sokol92 написал: не доводил ситуацию до проблемной
Не понял. Что Вы имеете ввиду под "проблемной ситуацией"? Накапливание мусора в файле?

Владимир, если у Вас есть ответы на вопросы vikttur, ответьте пожалуйста.
 
Да, и как следствие, снижение стабильности в работе, вплоть до полной неработоспособности. Мне удавалось неоднократно "чинить" чужие файлы методом из #2. На форуме есть и сообщения Владимира (ZVI) с подобными рекомендациями (знания Владимира сопоставимы со знаниями разработчиков :) ).

Кстати Владимир пишет в указанной ссылке нечто новое для меня:

Цитата
когда книга загружается с отключенными макросами, то скомпилированная  часть VBA-проекта не загружается, и при сохранеии книга сохраняется  только с исходным кодом. При этом вместе со скомпилированным кодом  удаляется и накопленный в нем "мусор" в виде сохраненных фрагментов  исходного кода
Изменено: sokol92 - 01.03.2020 16:00:42
Владимир
 
sokol92,  можно ли как-то мониторить накапливание мусора в коде?
 
Пропустил  такую информацию.
Спасибо.
 
Уточнил #7. Про мониторинг мусора программным путем ничего не знаю, сам "мониторю" глазами после каждой группы изменений.
Владимир
 
Цитата
...скомпилированная  часть VBA-проекта не загружается, и при сохранеии книга сохраняется  только с исходным кодом.
Открыть книгу при отключенных макросах, сохранить, закрыть.
Разрешить работу макросов, открыть книгу, компилировать код.

Как бы почистили? Но ведь при компиляции опять сохранился мусор... Да, возможно, его будет меньше, чем до этих телодвижений, но полностью избавиться не получится и для полной очистки все равно нужно чистить методом из сообщения №2?
 
Сама по себе компиляция мусор не создает, она увеличивает объем проекта за счет добавления откомпилированного кода (исходный текст при этом остается). Полезно сохранять файл для будущего использования именно в откомпилированном виде, чтобы не терять времени при открытии (на старых компьютерах компиляция больших настроек занимала несколько секунд, что раздражало пользователей).
Владимир
 
sokol92, вот и у viktturа возникли вопросы и у меня тоже.
Есть Книга. Хочу почистить её от мусора в коде. Можно ли пошагово представить план действий?
Изменено: Evgenyy - 01.03.2020 16:39:42
 
Алгоритм описан в #2. Если у Вас 32-разрядный офис (что очень вероятно), то можно воспользоваться  надстройкой VBA Code Cleaner по ссылке там же.
Владимир
 
sokol92, благодарю за предоставленную информацию.
 
И еще одно замечание из практики. Если надстройка (или обычная книга с макросами) предназначена для коллективного использования, то она обычно хранится у заказчика как ReadOnly файл на сетевом каталоге (FTP, ...) или в BLOB объекте базы данных. Если эта надстройка компилировалась на версии Excel, отличной от версии Excel пользователя, то при открытии она будет перекомпилирована.

В таких случаях полезно сохранять (программным путем, естественно) каждую новую надстройку на локальном диске, менять дату и время изменения вновь сохраненного файла на дату и время изменения исходного, а далее повторять это действие при смене версии (времени изменения) исходного файла надстройки.
Владимир
 
Спасибо еще раз.
 
Не стоит полностью доверять VBA Code Cleaner
Проверил на копии надстройки
Размер уменьшился на 300 кб, но получил вот что
 
Ничего себе, какие косяки вылезают. И как это объяснить?
 
Цитата
doober написал:
Размер уменьшился на 300 кб, но получил вот что
небоевые потери :-)
По вопросам из тем форума, личку не читаю.
 
Да, всё портится... Я пользуюсь следующей версией, не подводила и является VBA-надстройкой  (в отличие от текущей версии):
Цитата
''' VBA Code Cleaner 4.4 © 1996-2002 by Rob Bovey,
''' all rights reserved. May be redistributed for free but
''' may not be sold without the author's explicit permission.
Изменено: sokol92 - 01.03.2020 18:18:38
Владимир
 
sokol92, можете выложить где-нибудь и дать ссылку для скачивания?
 
Есть у Игоря на сайте.
Владимир
 
Цитата
sokol92 написал:
VBA Code Cleaner 4.4 © 1996-2002 by Rob Bovey
Скачал, протестировал: работает отлично, ни каких косяков не вылезает. Файл размером 505 Кб почистил до 465 Кб.
Изменено: Evgenyy - 01.03.2020 20:43:21
 
Поэкспериментировал с надстройкой, и пришёл к выводу: надстройка чистит код только в модулях, но не в листах книги.
На основании чего сделал такой вывод? На основании того, что после очистки кода надстройкой, методом описанным в #1 очистил код ещё на 10 Кб.
Изменено: Evgenyy - 02.03.2020 18:14:06
Страницы: 1
Наверх