【发布时间】:2012-11-02 04:16:14
【问题描述】:
在 VBA 中,我需要一个子模块来告诉实例设置一些变量。
在模块 1 中,我有:
Sub Load()
ThisWorkbook.SetupVariables
ThisWorkbook.TestVariables
End Sub
在 ThisWorkbook 我有:
Private Variable1 As Integer
Private Variable2 As String
Private Variable3 As MyUserDefinedObjectType
Public Sub SetupVariables()
Variable1 = 5
Variable2 = "Five"
Set Variable3 = New MyUserDefinedObjectType()
End Sub
Sub TestVariables()
MsgBox Variable1 & " is spelled " & Variable2
Variable3.SomeFunction
End Sub
在 Load() 中对 TestVariables 的调用会产生正确的结果,但对 TestVariables 的后续调用会失败。如何让 Variable1 和 Variable2 保持它们的值? (在我的实际情况中,这些变量是我定义的对象,不能成为公共变量。)
事件顺序:
Load 存储在Module1 中,并与Worksheet1 上的表单按钮相关联。这是先按下的。
随后,Worksheet2 中的一个 ActiveX 控件告诉ThisWorkbook 调用TestVariables。
【问题讨论】:
-
你为什么用
ThisWorkbook. ...来称呼它?为什么不直接调用呢? -
我需要这些变量在“加载”子程序完成执行后保持在范围内。我将所有私有变量隐藏在 ThisWorkbook 中,而是提供访问器/修改器函数来获取它们。
-
您发布的代码中未显示其他内容。您是否在其他代码中执行任何可能重置 VBA 环境的操作?比如打电话给
End? -
不,我没有打电话给
End。我只是在Worksheet1上为Load()按下表单按钮(存储在Module1),然后在Worksheet2(存储在Worksheet2)中按下表单按钮,告诉ThisWorkbook调用它的TestVariables()子例程.由于变量都保存在ThisWorkbook中,我希望它们保留,但是当我在Load()之后检查时,它们都是新初始化的。 -
由于您发布的代码应该可以工作(并且其他人已经成功测试过),您可以上传一个工作簿来演示您遇到的问题吗?我认为在这一点上,我们大多只是在猜测还会发生什么。
标签: excel vba variables module instance