我在一个模块中有一个sub,它调用另一个模块中的函数,并且该函数是公开定义的,在调用函数后,我将其返回的值存储到变量中。
我的问题是:
该函数在被该子句调用后是否在内存中保留其值?如果是这样的话我想根据它的类型(例如:set myFunct = nothing
)从内存中清除它,如果它返回一个对象。
答案 0 :(得分:3)
VBA使用"垃圾收集器"
实现Reference counting清理内存当您调用某个函数时,此函数是私有还是 public 并不重要。重要的是,如果在函数内部,您为对象使用全局或本地变量。在您的情况下,它看起来像是本地。
因此,您的本地变量仅在您的函数中引用,因此其引用计数器 = 1。
当你的变量超出范围时,即当函数结束并返回值时,对象的引用计数器递减并变为0 。 虽然对象仍然存在于内存中,但它不再可寻址,变得无用,因此是垃圾收集器的候选对象。
当您编码Set theobject_inside_function = nothing
时,您只是显式递减参考计数器。因此,在函数内部执行它是没用的,因为一旦函数结束,VBA将为您完成。
您还可以阅读this article,它已经过时但仍然打破了很多关于VB中变量清理的神话
答案 1 :(得分:0)
从我注意到只要有一个与函数链接的变量(意味着该变量的值来自函数输出),该函数保持活着...我测试了。 请留下任何有助于我们了解更多信息的评论