我们经常在此站点上遇到有关变量范围以及在何处以及如何声明变量的问题。 本教程旨在涵盖VBA for MS Access中的变量范围的基础。 为了简洁起见,我坚持常用用法。

在本教程中的“过程”一词中,实际上是指子例程或函数。


范围的定义


可以看到或访问此变量的变量范围。

变量的作用域级别可以细分如下:

程序范围


在过程内声明变量时,该变量仅在该过程的一个实例中可用。 旨在在整个过程中具有作用域的变量都应在过程开始时声明。 可以使用Dim或Static(在本教程中进一步说明static)来声明在过程中声明的变量。


模块范围


如果在模块内但在任何过程外都声明了变量,则该变量在整个模块中都可用。 对于表单模块,范围仅限于表单的代码区域。 对于标准模块,范围的限制将取决于声明的类型。


私人的


如果在模块中将变量变暗,则默认为私有。 这将变量的范围限制为声明该变量的模块(在任何过程外部声明时)。

Dim str As String


上市


如果您显式声明一个变量Public(Dim是可选的),则该变量在整个数据库中都可用。 在标准模块中使用时,没有任何限制。 这代替了将Global用作变量声明的旧用法。 如果相关模块是Form模块,则该变量将限于声明它的表单的代码区域。 您不能在过程中声明公共变量。 这将给出一个错误。 此外,我发现Access 2003中的表单/报表无法访问Public(模块)变量。

Public str As String


静态的


如果将变量声明为静态(Dim是可选的),则即使声明该过程的实例终止后,该变量仍然存在并保留其值。 您只能在过程中声明静态变量。 静态变量的生存期比声明它的过程实例更长。 它一直存在,直到项目终止。 可以在不关闭数据库的情况下终止或重置项目。

Static str As String


注意


所有变量都应在代码区域的开头声明,无论是模块,过程还是块,都应在其中出现。