Access Global无法正常工作

时间:2015-06-08 14:33:26

标签: vba ms-access

我有一个名为EmployeeID的全局变量。我通过调用函数来设置它:

   Global EmployeeID As Integer
   Public Sub init_Globals(emp As Integer)
       EmployeeID = emp
    End Sub

在主表格上,我使用了:

MsgBox EmployeeID

从一个按钮,它工作得很好;但有趣的是,当我从子表单中使用它时,它返回0: 我可以补充一点,这也是一个连续表格。

Private Sub cboWhichDate_AfterUpdate()
    Me.txtEmployee = EmployeeID
End Sub

1 个答案:

答案 0 :(得分:2)

如果“全局”变量的范围是全局变量,则它只能是“全局变量”。将Global访问修饰符粘贴到类模块中声明的字段不会使其成为全局。

事实上,Global关键字已弃用,并且已被Public访问修饰符完全替换/取代。

重要的是变量的范围。如果该声明位于类模块中(表单的代码隐藏 本质上是一个类模块),那么您所做的就是声明一个公共实例字段;您只能通过拥有它的对象实例访问该值。

Dim MyObject As New MyForm
MyObject.EmployeeID = 42

MsgBox MyObject.EmployeeID

要创建一个全局变量,请在项目中添加一个标准模块(.bas),并在那里声明它。

Public EmployeeID As Integer

现在每个地方的所有人都可以访问EmployeeID,因为它作用域模块(即不是对象的实例) ,及其辅助功能是公开的。

尽管如此,全球变量是邪恶的,很容易导致不可维护的意大利面条代码;请考虑将值作为参数传递。