Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA内存使用:在不同的子模块中声明相同的变量,而在模块中公开声明相同的变量_Vba_Excel - Fatal编程技术网

VBA内存使用:在不同的子模块中声明相同的变量,而在模块中公开声明相同的变量

VBA内存使用:在不同的子模块中声明相同的变量,而在模块中公开声明相同的变量,vba,excel,Vba,Excel,关于内存使用的快速问题,因为我希望始终以最佳方式编写代码。我环顾四周,但没有找到我的问题 我的工作簿中有几个工作表,通常是在启动新的excel/vba项目时创建的。这些可能是“图书馆”和“数据”之类的东西。在每个子项开始时,我将声明: Dim libWS as Worksheet Dim dataWS as Worksheet Set libWS = Worksheets("LIBARARY") Set dataWS = Worksheets("DATA") 我为每个将使用这些工作表的子系统执

关于内存使用的快速问题,因为我希望始终以最佳方式编写代码。我环顾四周,但没有找到我的问题

我的工作簿中有几个工作表,通常是在启动新的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
速度/内存使用方面的最佳含义


谢谢

我认为这两个选项都是不必要的,因为您可以直接将工作表作为Excel对象模型中的对象引用。如果将对象(而不是工作表名称)重命名为
数据

然后,您可以在如下代码中引用它们:


我认为这两个选项都是不必要的,因为您可以直接将工作表作为Excel对象模型中的对象引用。如果将对象(而不是工作表名称)重命名为
数据

然后,您可以在如下代码中引用它们:


我认为,在代码评审中,这个问题更好。试着在那里发布你的完整代码以获得良好的响应。我不会这么做,至少有两个原因:(1)全局变量!(2) 如果一个未经处理的错误最终重置了VB项目,那么全局变量将被清除,剩下的代码将被炸掉。相反,可以创建一个函数,返回一个“设置”对象(每个工作表都有字段),并在需要处理常用访问项时调用该函数。或者在VBProject中更改图纸对象的代码名,然后您可以将它们称为(例如)
libWS
,而无需声明它们或将它们设置为任何值。取决于你的工作表的静态程度。谢谢你们的评论。我不知道有一个代码审查部分。我将在将来利用它,我认为在代码评审中更好地解决这个问题。试着在那里发布你的完整代码以获得良好的响应。我不会这么做,至少有两个原因:(1)全局变量!(2) 如果一个未经处理的错误最终重置了VB项目,那么全局变量将被清除,剩下的代码将被炸掉。相反,可以创建一个函数,返回一个“设置”对象(每个工作表都有字段),并在需要处理常用访问项时调用该函数。或者在VBProject中更改图纸对象的代码名,然后您可以将它们称为(例如)
libWS
,而无需声明它们或将它们设置为任何值。取决于你的工作表的静态程度。谢谢你们的评论。我不知道有一个代码审查部分。我会在将来利用它,罗宾,非常感谢你的回答。我不知道您可以重命名这些对象并在子例程中使用它们。这会让我的生活更轻松!我希望从这次讨论中得到的一个附带问题是关于内存使用的,我认为这个问题没有得到很好的回答。也许你能帮忙。。假设我用每一个子项“libWS as Worksheet/Set libWS=worksheets(“LIBRARY”)来声明这些工作表,那么这些声明是否会像它自己的表一样占用内存?假设我声明了5次,这是否等于添加了5张表?表变量只是指向对象本身的指针-它不会创建复制“的sheet@Citanaf-根据Tim所说,您的方法不会仅因为为实际工作表声明了变量而对其使用等效内存。变量本身以及它指向工作表对象所需的少量内存。嗨,蒂姆,罗宾,谢谢你们。我很紧张,因为我在毫无必要地利用大量的记忆。感谢你们两位的清晰。现在我将回顾我的项目,并删除一些不必要的声明。干杯罗宾,非常感谢你的回答。我不知道您可以重命名这些对象并在子例程中使用它们。这会让我的生活更轻松!我希望从这次讨论中得到的一个附带问题是关于内存使用的,我认为这个问题没有得到很好的回答。也许你能帮忙。。假设我用每一个子项“libWS as Worksheet/Set libWS=worksheets(“LIBRARY”)来声明这些工作表,那么这些声明是否会像它自己的表一样占用内存?假设我声明了5次,这是否等于添加了5张表?表变量只是指向对象本身的指针-它不会创建复制“的sheet@Citanaf-根据Tim所说,您的方法不会仅因为为实际工作表声明了变量而对其使用等效内存。变量本身以及它指向工作表对象所需的少量内存。嗨,蒂姆,罗宾,谢谢你们。我很紧张,因为我在毫无必要地利用大量的记忆。感谢你们两位的清晰。现在我将回顾我的项目,并删除一些不必要的声明。干杯