excel - MS Excel VBA : Is it faster to use Public Variables or Pass Variables between Subs?

标签 excel vba

我不是最精明的 VBA 编码员,所以我很感激你的建议!我有多个模块,其中每个模块都需要访问一本工作簿(Master.xlsm)。 1) 使用公共(public)变量在其他模块中访问此工作簿更快,还是 2) 在使用它的每个子程序中打开它更快?

选项#1

我会将工作簿设置为公共(public)变量,并在使用 Auto_Open 打开工作簿时对其进行分配。

Public wbk_MASTER As Workbook

Sub Auto_Open()

    Set wbk_MASTER = Workbooks.Open("C:\Master.xlsm")

End Sub

选项#2

或者,在每个使用 Master.xlsm 的子程序中,我只需将其传递如下:

Sub DoSomething(wbk_master as Workbook)

    ' do something

End Sub

假设无论什么子程序调用这个子程序都会看起来像:

Sub CallDoSomething()

    Dim wbk_master as Workbook
    Set wbk_master = Workbooks.Open("C:\Master.xlsm")

    Call DoSomething(wbk_master)

End Sub

请注意,会有多个子项,例如 DoSomething。如果有影响的话,我还希望在 Master.xlsm 中为重要工作表提供变量,甚至是特定范围内的值。

就我个人而言,我认为选项 #1 更干净,但哪个更快?

最佳答案

德克已经直接回答了你的问题,但是更具弹性的第三种选择怎么样?

在标准模块中:

Public Property Get SourceWorkbook() as Workbook

    Static wkb_Master As Workbook

    If wkb_Master is Nothing Then Set wkb_Master = Workbooks.Open("C:\Master.xlsm")

    Set SourceWorkbook = wkb_Master

End Property

然后就可以使用它了:

Sub test()

    SourceWorkbook.Sheets(1).Name

End Sub

它使范围保持较小且只读,此外,如果您的项目被重置,将重新打开源文档 - 您的方法都不会执行此操作。

关于excel - MS Excel VBA : Is it faster to use Public Variables or Pass Variables between Subs?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46431764/

相关文章:

ms-access - 可以使用 VBA 更改的 Access 启动属性是什么

excel - 带有#N/A 值的数据透视表?

excel - 更有效的方法来复制函数 VBA/Excel

regex - VBA 6 : regex not recognizing complicated string

sql-server - SQL server 计划任务发送 Excel 文件的最佳方式?

excel - 动态自动填充目标

vba - 当范围为 1 时,循环变量范围的代码失败

vba - 动态改变编号VBA 数组的维数

excel - Excel数据与Visio/PPt之间的数据链接

mysql - 打开从 VBA Excel 2007 到 MySQL 的连接