gpt4 book ai didi

excel - VBA 全局变量,多个工作簿

转载 作者:行者123 更新时间:2023-12-04 20:00:41 26 4
gpt4 key购买 nike

我有一个 VB 应用程序,它使用一些全局变量来存储多个表单和模块所需的数据,这很好用。但是,如果用户打开另一个工作簿,运行相同的 VBA 应用程序,那么他们最终会访问(和更改)相同的公共(public)变量。

我怎样才能拥有工作簿级别的全局变量,或者如果这是不可能的,那么存储所有表单和模块都可以访问但只能在特定工作簿中访问的数据的最佳方式是什么?

这是一个 VBA 插件,全局变量在标准模块中声明。

最佳答案

我能够用一个名为 George 的简单 xla 来复制这个问题:

Public harry As Variant

Public Sub setHarry(x)
harry = x
End Sub

Public Function getHarry()
getHarry = harry
End Function

我安装了xla。然后我创建了 Alice.xls,其中包含一个在更改时调用 setHarry 的文本框和一个包含 =getHarry() 的单元格。我保持非常简单:
Private Sub TextBox1_Change()
Run "george.xla!setHarry", TextBox1
End Sub

然后我将 Alice.xls 复制为 Bob.xls 并运行它们。正如预期的那样,如果任一工作簿更改 Harry,两个工作簿都会看到结果。

我说是预期的,因为 xla 就像 dll 一样,内存中只有一个副本,每个人都共享;这显然包括全局变量,这是有道理的。我只是想测试一下这个理论。

在我看来,解决这个问题的最好方法是使用类模块而不是普通模块。这样,您可以在 Workbook_Open 事件中为每个工作簿提供其自己的类实例及其变量。如果变量被声明为 public,则不需要属性获取和设置,但如果这样做有值(value),您可以使用它们。

关于excel - VBA 全局变量,多个工作簿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3777446/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com