相关疑难解决方法(0)

是否需要在VBA函数中将对象设置为Nothing

我总是读到,一旦我完成它们,建议将对象设置为空.但我通常只在表单内的函数中使用它们.

在保留功能范围时,是否丢失了引用并释放了内存,而不管将对象设置为Nothing?

即是否真的有必要这样做:

Set db = Nothing
Set record_set = Nothing
Run Code Online (Sandbox Code Playgroud)

ms-access vba office-2003 access-vba

62
推荐指数
3
解决办法
6万
查看次数

通过With语句释放变体类型对象数组元素

如果一个对象数组被声明为Variant类型(以便轻松检查它是否使用IsEmpty函数初始化),那么,如果随后定义的数组的元素被引用为With语句的对象表达式(例如With VariantObjArray(i) ...),那么对象变量数组元素将被错误地释放(尽管With语句的对象变量的隐式副本将在单个后续执行过程中正确运行 - 通过With语句的范围)。此外,数组元素对象变量的错误释放可能是内存泄漏,因为它是在执行 With 表达式时立即发生的,而不是任何标准释放机制(例如退出With语句或从子例程返回)的结果或明确设置为 Nothing。

Sub DemoVariantObjArrayBug()
    Dim i As Integer
    Dim NextWkSh As Worksheet
    Static VariantObjArray As Variant

    If IsEmpty(VariantObjArray) Then 'Check to avoid unnecessary re-allocation of static or global array variable
        ReDim VariantObjArray(1 To ThisWorkbook.Worksheets.Count)
        For Each NextWkSh In ThisWorkbook.Worksheets
            i = i + 1: Set VariantObjArray(i) = ThisWorkbook.Worksheets(i)
        Next NextWkSh
    End If
    
Stop 'and, to observe the bug, open the Locals …
Run Code Online (Sandbox Code Playgroud)

arrays vba object variant

7
推荐指数
1
解决办法
207
查看次数

标签 统计

vba ×2

access-vba ×1

arrays ×1

ms-access ×1

object ×1

office-2003 ×1

variant ×1