如何强制VBA / Access要求定义variables?

我正在对一些VBA代码进行一些重大更改,并且正在删除和/或重命名一些variables。 如果编译器会向我抱怨说variables不存在,而不是在运行中创build它,那么find所有需要更新的位置会容易得多。

如何强制VBA / Access要求声明variables?

您需要在每个VBA代码模块(包括表单和报表)顶部使用Option Explicit

您可以通过进入VBA编辑器>>工具>>选项>>编辑器选项卡来设置所有将来创build的模块和VBA代码在窗体和报表背后,并确保需要variables声明被选中。

从Access 2003帮助:

需要variables声明 – 确定模块中是否需要显式variables声明。 select此项将Option Explicit语句添加到任何新模块中的常规声明中。

我也使用骆驼的情况下,当我昏暗的variables。 ThisIsAnExampleOfCamelCase 。 一旦我退出VBA代码行,如果Access不会将小写variables更改为骆驼案,那么我知道我有一个错字。

OPTION EXPLICIT和Access VBA的一些历史

从Tony的回答可以看出,为什么在某些Access代码模块中OPTION EXPLICIT没有出现问题,这里有一些解释。

在Access 95和Access 97(VBA的前两个Office版本)中,Access具有与其他Office程序不同的代码编辑器。 在Access 2000中,Microsoft从Access中的其他Office应用程序实现了VBE。 与此同时,MSselect使Access VBA模块的行为与其他应用程序中的模块相同,默认情况下具有OPTION EXPLICIT。

因此,在Access 2000中,默认情况下,模块是在没有OPTION EXPLICIT的情况下创build的。

当然,这对于MS来说是一个非常愚蠢的devise决定,他们稍后将其颠倒过来(我不记得是否是Access 2002或2003,纠正了这个问题,并默认再次select所有新模块中的OPTION EXPLICIT)。 这是愚蠢的原因(和MS应该知道这一点)是因为Access是一个数据库应用程序开发工具,因此正在对强types的数据进行操作。 因此,代码环境默认应该是强types的,以便与正在使用的数据相一致。

在Excel或Word中,数据不是强types的,因此使用不同的数据types来处理所有事情更为有意义,只是为了让每个人都更容易。 通过不使用OPTION EXPLICIT来实现这个function的缺点是,你最终可能会自动导入新的variables(如variables“intrdoduce”) – 如果我使用OPTION EXPLICIT编写这个文章,那不会发生产生运行时错误! :)。 这是所有这样的语言这样工作的问题(我拉我的头发在PHP中工作,其中variables名可以是不同的大小写,即$ Var不是variables相同的variables作为$ var;但我离题),但MS决定在Word和Excel中以这种方式实现这一点,理论上说,如果编程人员不被迫声明variables,编写代码的人将会有一个更容易的时间。

所以,MS犯的错误是使Access的VBE版本像其他应用程序一样,尽pipeAccess本身并没有内在的逻辑来支持这一举措。 然后,MS退出了这个变化,回到了以前的状态(即所有模块默认的OPTION EXPLICIT)。

因此,您经常会看到在Access 2000中开始生活的应用程序,其模块遍布整个地方而没有OPTION EXPLICIT。 当我必须在这样一个应用程序上工作时,我的第一个任务是在所有模块中实现OPTION EXPLICIT,然后修复这个该死的东西,这样它就可以编译了(这通常是相当困难的,因为这个东西没有编程)。

这个问题对Excel很有帮助,你可能会看到它是否适用于Access:

失去的variables

Essentialy, MZ工具将search您的代码,并告诉你什么没有被使用。 VBA的版本可以在这里find。 使用“ 审阅源代码”function。