如何判断数组已经初始化

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/taller_2000/article/details/84868855

VBA编程中经常用到数组,在代码中使用数组之前,需要确保数组已经完成初始化操作,借助API可以进行判断。

Private Declare Function SafeArrayGetDim Lib "oleaut32.dll" (ByRef saArray() As Any) As Long
Sub Demo()
    Dim strArray1() As String
    Dim strArray2() As String
    Dim strArray3(1 To 3) As String
    Dim strArray4(1 To 3) As Integer
    
    Debug.Print "strArray1 - " & IIf(SafeArrayGetDim(strArray1) > 0, "已初始化", "未初始化")
    Debug.Print "strArray2 - " & IIf(SafeArrayGetDim(strArray2) > 0, "已初始化", "未初始化")
    Debug.Print "strArray3 - " & IIf(SafeArrayGetDim(strArray3) > 0, "已初始化", "未初始化")
    Debug.Print "strArray4 - " & IIf(SafeArrayGetDim(strArray4) > 0, "已初始化", "未初始化")
    
    strArray1 = Split("1,2,3", ",")
    ReDim strArray2(1 To 3)
    Debug.Print "==============="
    Debug.Print "strArray1 - " & IIf(SafeArrayGetDim(strArray1) > 0, "已初始化", "未初始化")
    Debug.Print "strArray2 - " & IIf(SafeArrayGetDim(strArray2) > 0, "已初始化", "未初始化")
End Sub

代码解析:

执行完DIM语句后,四个数组的状态是否相同呢?来看一下VBE中【本地窗口】。
在这里插入图片描述
Dim strArray1() As String声明的数组,其类型为String(),“值”为空,这样的数组尚未进行初始化无法使用。
strArray3和strArray4则已经完成初始化,根据数组的数据类型,数组元素具备相应的初始值,String数组strArray3初始值为空字符,Integer数组strArray4初始值为0,在代码中可以访问其元素的值或者进行赋值等操作。
除了DIM语句之外,第13行和第14行代码也可以实现数组初始化。代码执行后,【立即窗口】如下图所示。

在这里插入图片描述

利用API函数SafeArrayGetDim可以判断数组是否已经完成初始化,代码运行结果如下。

strArray1 - 未初始化
strArray2 - 未初始化
strArray3 - 已初始化
strArray4 - 已初始化
===============
strArray1 - 已初始化
strArray2 - 已初始化

猜你喜欢

转载自blog.csdn.net/taller_2000/article/details/84868855