声明要在Module1中初始化并在UserForm模块中使用的变量

时间:2017-11-20 08:14:48

标签: vba excel-vba global-variables excel

我有一个项目包含一个模块(main)和一个用户表单模块(myUserForm)。 我在模块main

之上将变量声明为全局变量
Dim myGlobal As MyType

...然后我在模块main中设置我的变量:

Public Sub mySubInMain()
    Set myGlobal = New MyType
End Sub

...但是当我尝试在模块myUserForm中使用它时:

Private Sub oneSubOfTheForm()
    myGlobal.Name = "something"
End Sub

...我得到Object required例外。我应该如何声明我的变量myGlobal生活在另一个堆栈中?

3 个答案:

答案 0 :(得分:3)

如果变量位于名为main的模块中,并且您将其声明为Public,即

Public myGlobal As MyType

您应该可以在用户窗体中将其引用为main.myGlobal(或简称为myGlobal,但通常最好对其进行限定,以便明确它所在的位置。)

答案 1 :(得分:0)

您可以使用标准模块中的Public属性来获取对象,以便控制其状态。

Option Explicit
Private type_ As CustomType

Public Property Get MyType() As CustomType
    If type_ Is Nothing Then Set type_ = New CustomType
    Set MyType = type_
End Property

答案 2 :(得分:0)

您必须将myGlobal分配给异常状态。因此,您必须先调用mySubInMain,然后才能使用myGlobal对象。