我不是最精明的 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/