Как заставить VBA/Access требовать определения переменных?

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

Как заставить VBA/Access требовать объявления переменных?

3 ответа

Решение

Вам нужно использовать Option Explicit в верхней части каждого модуля кода VBA, включая формы и отчеты.

Вы можете установить это для всех будущих созданных модулей и кода VBA за формами и отчетами, зайдя в редактор VBA >> Инструменты >> Параметры >> вкладка Редактор и проверив Требуется объявление переменных.

Из справки Access 2003:

Требовать объявления переменных - определяет, требуется ли явное объявление переменных в модулях. Выбор этого добавляет Option Explicit заявление к общим объявлениям в любом новом модуле.

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

Немного истории об OPTION EXPLICIT и Access VBA

Чтобы продолжить из ответа Тони, вот несколько объяснений, почему существуют проблемы с OPTION EXPLICIT, который не включен в некоторых модулях кода доступа.

В Access 95 и Access 97 (первые две версии Office с VBA) в Access был другой редактор кода, чем в других офисных программах. В Access 2000 Microsoft внедрила VBE из других приложений Office в Access. В то же время MS решила заставить модули Access VBA вести себя так же, как модули в других приложениях, которые по умолчанию не имели OPTION EXPLICIT.

Таким образом, в Access 2000 по умолчанию модули создавались без OPTION EXPLICIT.

Это было, конечно, действительно глупое дизайнерское решение со стороны MS, и они изменили его позже (я не могу вспомнить, был ли это Access 2002 или 2003, который исправил проблему и снова установил OPTION EXPLICIT во всех новых модулях). Причина, по которой он был глупым (и MS должна была это знать), заключается в том, что Access является инструментом разработки приложений базы данных и, таким образом, работает с данными, которые строго типизированы. Таким образом, среда кода должна быть строго типизирована по умолчанию, чтобы она гармонировала с данными, с которыми она работает.

В Excel или Word данные не строго типизированы, и поэтому имеет смысл использовать разные типы данных практически для всего, просто для того, чтобы всем было легче. Недостатком реализации этого, не используя OPTION EXPLICIT, является то, что вы можете получить опечатки, которые автоматически вводят новые переменные [такие как переменная "intrdoduce" - если бы я писал этот пост с OPTION EXPLICIT, этого бы не случилось без выдает ошибку во время выполнения!:)]. Это проблема со всеми такими языками, которые работают таким образом (я стараюсь работать в PHP, где имена переменных могут различаться в зависимости от конкретного случая, т. Е. $Var - это не та же переменная, что и $var; но я отступаю), но MS приняла решение реализовать это таким образом в Word и Excel, полагая, что людям, пишущим код, будет легче, если они не будут вынуждены объявлять свои переменные.

Таким образом, MS допустила ошибку, сделав Access-версию VBE, как и другие приложения, несмотря на то, что не было внутренней логики для собственных целей Access, которые поддерживали этот шаг. Затем MS отклонила это изменение и вернулась к предыдущему статус-кво (т. Е. OPTION EXPLICIT по умолчанию во всех модулях).

Таким образом, вы часто будете видеть приложения, начавшие жизнь в Access 2000, которые имеют модули повсюду без OPTION EXPLICIT. Когда мне приходится работать над таким приложением, моя первая задача - реализовать OPTION EXPLICIT во всех модулях, а затем исправить проклятую вещь, чтобы она скомпилировалась (что часто довольно сложно, учитывая, что она была запрограммирована без нее).

Этот вопрос был очень полезен для Excel, вы можете увидеть, будет ли он работать для Access:

Потерянные переменные

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

Другие вопросы по тегам