vba函数调用后返回的值

时间:2016-03-20 20:11:05

标签: vba function memory

我在一个模块中有一个sub,它调用另一个模块中的函数,并且该函数是公开定义的,在调用函数后,我将其返回的值存储到变量中。

我的问题是: 该函数在被该子句调用后是否在内存中保留其值?如果是这样的话我想根据它的类型(例如:set myFunct = nothing)从内存中清除它,如果它返回一个对象。

enter image description here

2 个答案:

答案 0 :(得分:3)

VBA使用"垃圾收集器"

实现Reference counting清理内存

当您调用某个函数时,此函数是私有还是 public 并不重要。重要的是,如果在函数内部,您为对象使用全局本地变量。在您的情况下,它看起来像是本地

因此,您的本地变量仅在您的函数中引用,因此其引用计数器 = 1。

当你的变量超出范围时,即当函数结束并返回值时,对象的引用计数器递减并变为0 。 虽然对象仍然存在于内存中,但它不再可寻址,变得无用,因此是垃圾收集器的候选对象。

当您编码Set theobject_inside_function = nothing时,您只是显式递减参考计数器。因此,在函数内部执行它是没用的,因为一旦函数结束,VBA将为您完成。

您还可以阅读this article,它已经过时但仍然打破了很多关于VB中变量清理的神话

答案 1 :(得分:0)

从我注意到只要有一个与函数链接的变量(意味着该变量的值来自函数输出),该函数保持活着...我测试了。 请留下任何有助于我们了解更多信息的评论