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

时间:2009-07-16 18:12:39

标签: ms-access vba

我正在对某些VBA代码进行一些重大更改,并且正在删除和/或重命名某些变量。如果编译器会向我抱怨变量不存在而不是动态创建它,那么找到我需要更新的所有位置要容易得多。

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

3 个答案:

答案 0 :(得分:35)

您需要在每个VBA代码模块的顶部使用Option Explicit,包括表单和报告。

您可以通过进入VBA编辑器>>为表格和报告后面的所有未来创建的模块和VBA代码设置此项。工具>>选项>>选中编辑器选项卡并确保要求变量声明。

从Access 2003帮助:

  

需要变量声明 - 确定模块中是否需要显式变量声明。选择此选项会将Option Explicit语句添加到任何新模块中的常规声明中。

当我调暗变量时,我也使用驼峰的情况。 ThisIsAnExampleOfCamelCase。一旦我退出VBA代码行,如果Access没有将小写变量更改为camel case,那么我知道我有一个错字。

答案 1 :(得分:16)

OPTION EXPLICIT和Access VBA的一些历史

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

在Access 95和Access 97(带有VBA的前两个Office版本)中,Access具有与其他Office程序不同的代码编辑器。在Access 2000中,Microsoft从Access中的其他Office应用程序实现了VBE。与此同时,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,然后修复该死的东西,这样它就会编译(这通常很难,因为没有它就编程了)。

答案 2 :(得分:0)

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

Lost Variables

Essentialy,MZ-Tools将搜索您的代码并告诉您未使用的内容。可以找到VBA的版本here。使用Review Source Code功能。