2016-11-04 50 views
0

关于内存使用的快速问题,因为我想始终以最佳方式编写我的代码。我环顾四周,但没有完全发现我的问题。VBA内存使用:在不同的subs中声明相同的变量vs在公共模块中声明相同的变量

我在工作簿中有几个工作表,我通常在创建新的excel/vba项目时创建这些工作表。这些可能是诸如“图书馆”和“数据”之类的东西。在每个子的开始处,我将声明:

Dim libWS as Worksheet 
Dim dataWS as Worksheet 
Set libWS = Worksheets("LIBARARY") 
Set dataWS = Worksheets("DATA") 

我会为每个使用这些工作表的子部分执行此操作。我的问题是,在模块中公开声明这些工作表并使用工作簿打开宏来初始化它们会更加优化还是相同?

模块1:

public libWS as Worksheet 
public dataWS as Worksheet 

此工作簿:

Private Sub Workbook_Open() 
    Set libWS = Worksheets("LIBARARY") 
    Set dataWS = Worksheets("DATA") 
End Sub 

在速度/存储器使用方面优化的含义。

感谢

+0

我认为问题是更好的服务在代码审查。尝试发布您的完整代码以获得良好回应。 –

+0

我不会那样做,至少有几个原因:(1)全局变量! (2)如果一个未处理的错误最终导致您的VB项目重置,您的全局变量将被擦除,您的代码将被其他代码炸毁。也许相反,创建一个函数返回一个“设置”对象(每个表单都有字段),并在每次需要处理常用项时调用它。或者在VBProject中更改工作表对象的代码名称,然后您可以将它们称为(例如)'libWS',而无需声明它们或将它们设置为任何内容。取决于您的床单的静态。 –

+0

谢谢你的评论。我不知道有一个代码审查部分。我将在未来利用这一点 – Citanaf

回答

2

我觉得这两个选项是不必要的,你可以直接引用工作表中的Excel对象模型对象。如果重命名的对象(而不是工作表的名称),以DATALIBRARY

enter image description here

然后你可以参考他们在这样的代码:

enter image description here

+0

罗宾,非常感谢您的回答。我不知道你可以重命名这些对象并在子例程中使用它们。这会让我的生活变得更轻松! 我希望摆脱这个讨论的一个侧面问题是关于内存使用情况,我不认为这个问题是完全可以回答的。也许你可以帮助..鉴于我是用每个子工具“libWS作为Worksheet/Set libWS = Worksheets(”LIBRARY“)来声明这些工作表,那些声明是否像自己的工作表一样消耗内存?可以说我拥有那些说5次,这将相当于有5增加表? – Citanaf

+0

一个表变量只是一个指向对象本身的指针 - 它不会创建一个表“复制” –

+0

@Citanaf - 根据蒂姆说你的方法会因为你为它声明了一个变量,所以没有在实际工作表中使用等价的内存,变量本身需要少量内存,并且它指向你的工作表对象 –

相关问题