为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

临摹微笑 2020-02-02 14:07:54
我正在对某些VBA代码进行重大更改,并且某些变量正在被删除和/或重命名。如果编译器向我抱怨变量不存在而不是动态创建变量,那么查找所有需要更新的位置会容易得多。如何强制VBA / Access要求声明变量?
查看完整描述

3 回答

?
饮歌长啸

TA贡献1951条经验 获得超3个赞

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

您可以进入VBA编辑器>>工具>>选项>>编辑器选项卡,并确保选中了“需要变量声明”,以为表单和报表后面的所有将来创建的模块和VBA代码设置此设置。

从Access 2003帮助:

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

变量变暗时,我也会使用驼峰式大小写。 ThisIsAnExampleOfCamelCase。如果Access不会将小写变量更改为驼峰大小写,一旦退出VBA代码行,我就会知道输入错误。


查看完整回答
反对 回复 2020-02-02
?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

有关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撰写本文,那么如果没有OPTION EXPLICIT,就不会发生产生运行时错误!:)]。这是所有以这种方式工作的语言的问题(我努力工作于PHP,其中变量名可以按大小写区分,即$ Var与$ var是不同的变量;但是我离题了),但是MS决定在Word和Excel中以这种方式实现它,因为这样的理论是,编写代码的人如果不这样做的话,将会更轻松。

因此,MS犯了一个错误,即使Access的VBE版本像其他应用程序一样,即使Access自己的目的内部没有逻辑支持这一举动。然后,MS撤消该更改并返回到以前的状态(即,默认情况下,所有模块中的OPTION EXPLICIT)。

因此,您经常会看到在Access 2000中开始使用的应用程序,这些应用程序到处都是模块,而没有OPTION EXPLICIT。当我必须使用这样的应用程序时,我的首要任务是在所有模块中实现OPTION EXPLICIT,然后修复该死的东西,使其能够编译(鉴于该东西是在没有它的情况下进行编程的,因此通常很难)。


查看完整回答
反对 回复 2020-02-02
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

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


丢失的变量


本质上,MZ-Tools将搜索您的代码并告诉您未使用的内容。VBA的版本可以在这里找到。使用查看源代码功能。


查看完整回答
反对 回复 2020-02-02
  • 3 回答
  • 0 关注
  • 643 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信