gpt4 book ai didi

variables - 何时应终止 Excel VBA 变量或将其设置为 Nothing?

转载 作者:行者123 更新时间:2023-12-01 16:44:52 33 4
gpt4 key购买 nike

过去两年我一直在自学 Excel VBA,我认为有时在代码段末尾处理变量是合适的。例如,我已经看到它在改编自Ron de Bruin's code for transferring Excel to HTML的这一点中完成了。 :

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

我对此进行了一些搜索,除了如何做到这一点之外几乎没有发现什么,在一篇论坛帖子 a statement that no local variables need to be cleared 中,因为它们在 End Sub 处不再存在。根据上面的代码,我猜测在 End Function 或我没有遇到过的其他情况下可能不是这样。

所以我的问题归结为:

  • 网络上是否有某个地方解释了变量清理的时间和原因,但我还没有找到?

如果没有,请有人解释一下......

  • 何时需要对 Excel VBA 进行变量清理,何时不需要?
  • 更具体地说...是否有特定的变量用途(公共(public)变量?函数定义的变量?)在内存中加载的时间更长比潜艇做的,因此如果我不清洁可能会造成麻烦追随我自己?

最佳答案

VB6/VBA 使用确定性方法来销毁对象。每个对象都存储对其自身的引用数量。当数字达到零时,该对象将被销毁。

当对象变量超出范围时,保证被清除(设置为Nothing),这会减少各自对象中的引用计数器。无需手动操作。

只有两种情况需要显式清理:

  1. 当您希望在其变量超出范围之前销毁对象时(例如,您的过程将需要很长时间才能执行,并且该对象拥有资源,因此您希望将对象销毁为尽快释放资源)。

  2. 当两个或多个对象之间存在循环引用时。

    如果objectA存储对objectB的引用,并且objectB存储对objectA的引用,则这两个对象除非您通过显式设置 objectA.ReferenceToB = NothingobjectB.ReferenceToA = Nothing 来中断链,否则永远不会被销毁。

您显示的代码片段是错误的。无需手动清理。进行手动清理甚至是有害的,因为它会给你一个 false sense of more correct code .

如果您在类级别有一个变量,则当类实例被破坏时,它将被清除/销毁。如果需要,您可以提前销毁它(请参阅第 1. 项)。

如果您在模块级别有一个变量,那么当您的程序退出时(或者,如果是 VBA,当 VBA 项目重置时),它将被清除/销毁。如果需要,您可以提前销毁它(请参阅第 1. 项)。

变量的访问级别(公共(public)与私有(private))不会影响其生命周期。

关于variables - 何时应终止 Excel VBA 变量或将其设置为 Nothing?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19038350/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com