Как заставить VBA / Access требовать определения переменных? - PullRequest
18 голосов
/ 16 июля 2009

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

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

Ответы [ 3 ]

35 голосов
/ 16 июля 2009

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

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

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

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

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

16 голосов
/ 16 июля 2009

Немного истории на 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 во всех модулях, а затем исправить эту проклятую вещь, чтобы она скомпилировалась (что часто довольно сложно, учитывая, что она была запрограммирована без нее).

0 голосов
/ 16 июля 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...