【问题标题】:VBA change instance variable from module (excel)VBA从模块更改实例变量(excel)
【发布时间】: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


【解决方案1】:

它对我有用。为变量 1 创建一个观察(视图 - 观察窗口)并选择值更改时中断。您应该能够看到它何时变为零。

【讨论】:

  • 很遗憾,我无法在程序中设置断点,因为我正在更改资源。 (移动工作表等)
  • 你是用一个表单按钮设置值,然后用第二个按钮检查它们,还是这一切都在一个按钮上运行?
  • 我正在做的事情是否可能导致 ThisWorkbook 的实例被杀死并创建一个新实例?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-01
  • 2018-10-01
  • 1970-01-01
相关资源
最近更新 更多