На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! `
Не забудьте заглянуть в VB6 FAQ, так как большая часть VB-примеров актуальна и для VBA-раздела ;)
Модераторы: Old Bat, MIF
  
    > Оптимизация и компиляция модулей VBA

      Как VBA загружает программный код

      VBA загружает нужный код во время работы приложения. Сразу загружаются только модули, вызываемые в процессе подготовки приложения к работе. Это значит, что вместе с приложением загружаются только модули, которые нужны начальной форме или макросу Autoexec. Далее, когда приложение вызывает процедуру, хранящуюся в еще не загруженном модуле, VBA загружает этот модуль.

      В Office 95, загружая модуль, VBA загружал также все модули, содержащие используемый им код или переменные. Это «дерево вызовов» сильно замедляло загрузку форм. Конечно, время загрузки приложений с большим количеством кода при загрузке «по требованию» значительно уменьшается.
      Когда Office 95 загружал очередной объект, вместе с ним мог загружаться и ненужный код — множество глобальных модулей, код которых вызывался из модуля формы или отчета. Начиная с Office 97 дело обстоит иначе: теперь VBA загружает только тот модуль, который нужен прямо сейчас, и не тянет за ним все его связи.
      А вот по частям модули загружаться не могут. Если приложение обращается к переменной или процедуре из модуля, весь модуль загружается целиком. Поэтому, если вы озабочены скоростью выполнения программного кода, подумайте, нельзя ли перепланировать структуру некоторых модулей.
      Самый очевидный способ — сократить количество ненужного кода в каждом модуле. Чем меньше кода придется загрузить, тем быстрее откроется форма или отчет. Удаляйте из основных модулей редко используемые процедуры, группируйте их по назначению. Не забывайте, что стоит вам обратиться к одной переменной модуля, как весь модуль оказывается в памяти. Ваша цель — добиться, чтобы в память загружалось как можно меньше кода.

      Компиляция кода

      VBA обязательно должен откомпилировать код перед его выполнением. Если вы не дадите соответствующую команду заранее, VBA будет компилировать модули прямо перед их загрузкой. Например, если вы обратитесь к форме или отчету с неоткомпилированным модулем, VBA должен будет откомпилировать его, и только после этого приложение сможет загрузить объект. Очевидно, что загрузка в таком случае пройдет медленнее обычного.

      Что сохраняется при компиляции кода

      Откомпилировав ваш код, VBA сохраняет как его исходный текст, так и откомпилированную версию. Строго говоря, исходный текст хранится не совсем в том виде, в каком вы его ввели, а в виде набора лексем. Перед запуском кода VBA загружает только его откомпилированную версию — исходный текст для работы приложения не нужен. Если же код еще не откомпилирован, приложению приходится загружать его исходный текст и компилировать его.

      Когда следует выполнять компиляцию

      Команда Debug -> Compile <Имя проекта> открывает и компилирует все модули приложения, включая модули форм и отчетов. При этом выполняется полная синтаксическая проверка всех модулей. Это самый быстрый способ полной компиляции приложения, и ее обязательно нужно выполнить перед передачей приложения пользователю. В отличие от предыдущих версий офиса (Office 97/2000) эта команда меню не только компилирует все модули, но и сохраняет информацию о состоянии каждого из них.
      После выполнения команды Debug -> Compile <Имя проекта> у приложения имеется как исходная версия кода в виде набора лексем, так и его откомпилированный вариант. Программа отслеживает, какие модули она компилировала, не пытаясь делать это повторно перед запуском созданного приложения. Если же вы не давали такой команды, после выхода из приложения информация о том, что модули откомпилированы, будет потеряна, и перед следующим запуском VBA откомпилирует их снова. (Если со времени последней компиляции код не менялся, команда Compile <Имя проекта> недоступна.)

      Использованы материалы: "From Access 2002 Desktop Developer's Handbook"
      Litwin, Getz, and Gunderloy. (Sybex, 2001)
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0176 ]   [ 17 queries used ]   [ Generated: 26.04.24, 12:23 GMT ]