Vba 访问全局不工作

Vba 访问全局不工作,vba,ms-access,Vba,Ms Access,我有一个名为EmployeeID的全局变量。我通过调用函数进行设置: Global EmployeeID As Integer Public Sub init_Globals(emp As Integer) EmployeeID = emp End Sub 在主窗体上,我使用了: MsgBox EmployeeID 从一个按钮,它的工作刚刚好;但有趣的是,当我从子窗体使用它时,它返回一个0: 我可以补充一点,这也是一种连续形式 Private Sub cbo

我有一个名为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
“全局”变量只有在其作用域是全局的情况下才能是“全局的”。将
Global
access修饰符粘贴到类模块中声明的字段不会使其成为全局的

事实上,
Global
关键字已被弃用,并被
Public
access修饰符完全取代

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

Dim MyObject As New MyForm
MyObject.EmployeeID = 42

MsgBox MyObject.EmployeeID
要生成全局变量,请将标准模块(.bas)添加到项目中,并在其中声明

Public EmployeeID As Integer
现在,任何地方的每个人都可以访问
EmployeeID
,因为它的作用域是一个模块(即不是对象的实例),并且它的可访问性是公共的


也就是说,全局变量是邪恶的,很容易导致无法维护的意大利面代码;考虑将值传递为参数。

<代码> > EnabeID ID/COM>声明的位置和方式是什么?它是从登录点声明的。调用初始化全局(emp)