过去两年我一直在自学 Excel VBA,我认为有时在代码段末尾处理变量是合适的。例如,我已经看到它在这个位中完成,改编自Ron de Bruin 将 Excel 转换为 HTML 的代码 http://www.rondebruin.nl/mail/folder3/mail4.htm:
Function SaveContentToHTML (Rng as Range)
Dim FileForHTMLStorage As Object
Dim TextStreamOfHTML As Object
Dim TemporaryFileLocation As String
Dim TemporaryWorkbook As Workbook
...
TemporaryWorkbook.Close savechanges:=False
Kill TemporaryFileLocation
Set TextStreamOfHTML = Nothing
Set FileForHTMLStorage = Nothing
Set TemporaryWorkbook = Nothing
End Function
我对此进行了一些搜索,除了如何做到这一点之外几乎没有发现什么,并且在一篇论坛帖子中声明不需要清除局部变量 http://answers.microsoft.com/en-us/office/forum/office_2007-customize/how-to-reset-variables/cf8bc523-5a4a-e011-8dfc-68b599b31bf5?msgId=3b5d9cd6-684a-e011-8dfc-68b599b31bf5,因为它们不再存在于End Sub
。我猜测,根据上面的代码,这可能不是真的End Function
,或者其他我没有遇到过的情况。
所以我的问题归结为:
- 网络上是否有某个地方解释了变量清理的时间和原因,但我还没有找到?
如果没有,这里有人可以解释一下吗?
- 何时需要对 Excel VBA 进行变量清理,何时不需要?
- 更具体地说...是否有特定的变量用途(公共变量?
函数定义的变量?)在内存中加载的时间更长
比潜艇做的,因此如果我不清洁可能会造成麻烦
追随我自己?
VB6/VBA 使用确定性方法来销毁对象。每个对象都存储对其自身的引用数量。当数字达到零时,该对象就会被销毁。
对象变量保证被清理(设置为Nothing
)当它们超出范围时,这会减少各自对象中的引用计数器。无需手动操作。
只有两种情况需要显式清理:
-
当您希望在其变量超出范围之前销毁对象时(例如,您的过程将需要很长时间才能执行,并且该对象持有资源,因此您希望尽快销毁该对象以释放该对象)资源)。
-
当两个或多个对象之间存在循环引用时。
If objectA
存储对的引用objectB
, and objectB
存储对的引用objectA
,这两个对象永远不会被销毁,除非你通过显式设置来打破链objectA.ReferenceToB = Nothing
or objectB.ReferenceToA = Nothing
.
您显示的代码片段是错误的。无需手动清理。进行手动清理甚至是有害的,因为它会给您带来麻烦错误的感觉更正确的代码 https://stackoverflow.com/questions/18594258/reading-first-few-characters-in-large-text-files-in-vba/18594888#comment27378612_18594888.
如果您在类级别有一个变量,则当类实例被破坏时,它将被清除/销毁。如果你愿意的话,你可以提前销毁它(参见项目1.
).
如果您在模块级别有一个变量,那么当您的程序退出时(或者,如果是 VBA,当 VBA 项目重置时),它将被清除/销毁。如果你愿意的话,你可以提前销毁它(参见项目1.
).
变量的访问级别(公共与私有)不会影响其生命周期。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)