我不是最精明的VBA编码器,所以我会很感激你的建议!我有多个模块,其中每个模块都需要访问一个工作簿(Master.xlsm)。 1)使用公共变量访问其他模块中的工作簿或2)在使用它的每个子工具中打开它?MS Excel VBA:使用公共变量或通过变量之间的变量更快?
选项#1
我的工作簿设置为公共变量,并只要工作簿使用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更清洁,但速度更快?
保持范围尽可能小是最好的做法,选项2是更好的做法。速度 – SWa
我认为如果您需要在多个潜艇中使用主控,最好打开/设置一次,保持打开状态,并在需要时访问数据。我投票支持#1。使用公共作用域将保持对象可访问。我也同意SWa的看法,但最佳做法是建议,而不是“一个适合所有人”的解决方案。 #1可能会为xlsm分配更多的内存,但是从这个角度来看,将需要更少的开启/关闭,所以处理器时间更少,速度更快。 –
我开始从事VBA职业选择1,但是随着我的课程的发展,我发现我的代码页变成了小说,我的项目变得很庞大,根据选项2将变量传递到例程要好得多 - 但是,主要是因为我可以将任何工作簿传递给例程,并且不必在打开时打开并定义大量工作簿。只是感觉更容易跟踪。 – jamheadart