Просто для того, чтобы предложить альтернативу, позволяющую сохранить его чисто VBA и избежать новой зависимости от .NET, вы можете рассмотреть возможность использования коллекции TempVars
, которая была представлена в Access 2007. Это переживет сброс VBIDE. Обратите внимание, что он может хранить только примитивные типы данных (например, строки, числа, даты, но не объекты), и он доступен глобально.
Вы также можете рассмотреть возможность использования локальной таблицы доступа в качестве хранилища данных и чтения / записи в нее вместо этого, что также выдержит перезагрузку и также выдержит перезагрузку, что может быть желательным или нет, в зависимости от того, какие переменные вам нужны за. В случае, если вы предпочитаете, чтобы он не пережил перезапуски, достаточно просто очистить стол.
Мне нравится идея использования AppDomain для предоставления хранилища данных в памяти, которое не переживет перезапуск, но выполнит перезагрузку, но при этом выглядит неуклюжим, особенно если это единственное использование .NET CLR, которое у вас есть. Я также немного обеспокоен комментарием:
Причина, по которой я это использую, заключается в том, что любая неисследованная ошибка приводит к сбросу всех глобальных переменных в access vba.
Это не нормальное состояние дел. Обычно неперехваченная ошибка вызывает сообщение об ошибке VBIDE, где вы можете отладить или завершить. Следует отметить, что нажатие кнопки End
сбрасывает состояние так же, как нажатие кнопки «Стоп» или выполнение оператора Stop
. Для разработки, использование кнопки «Отладка» и обычный выход из процедуры (например, путем перемещения желтой стрелки к выходу) позволит избежать сброса состояния. По опыту пользователей, они никогда не увидят такой «сброс», за исключением случая использования ACCDE или запуска Access в режиме выполнения, что означает, что VBIDE недоступен для отладки, поэтому единственное значимое, что нужно сделать, это хорошо, закончить и выход. В этом случае это означает, что ошибка должна быть поймана в ловушку.
Если обработка ошибок является достаточно большой проблемой, вы можете рассмотреть возможность использования коммерческой сторонней надстройки, такой как vbWatchDog , которая чрезвычайно помогает в улучшении UX ошибок, особенно для ACCDE или среды выполнения. окружающая среда.
Итак, я немного обеспокоен тем, что идея AppDomain решает проблему только для разработчиков.