判断数组为空用了isNull,isEmpty,isArray结果都不对.在网上找了后,只有UBound(数组)=-1的答案.问UBound(数组)=-1是判断空数组的唯一条件吗?

解决方案 »

  1.   

    关键是你所谓的"数组为空"的意思是什么?你指的是数组没有被赋过值?还是指动态数组没有被REDIM初始化过?
      

  2.   

    lsgg = Ent.IntersectWith(Ent1, acExtendNone)是AutoCAD的直线相交的关键语句.
    如果相交,lsgg为数组ubound=2
    如果不相交,lsgg在本地窗口提示为无变量------------用ubound(lsgg)=-1为真可以达到目的.
    IsNull,IsEmpty,IsArray均不行.
      

  3.   

    如果数组未初始化,使用UBOUND貌似会出错吧.捕捉一下就OK.
      

  4.   

    SafeArrayGetDim用来判断一个数组的维数,该函数在MSDN中定义为:
    UINT SafeArrayGetDim(
      SAFEARRAY FAR* psa 
    );
    转换维VB中的语法格式为:
    Public Declare Function SafeArrayGetDim Lib "oleaut32.dll" (ByRef saArray() As Any) As Long
    如果数组已经初始化,则返回非0,否则返回0。
    'API判断数组为空或没有初始化 
    Sub diag()
    Dim msg As String
    Dim arr1() As String, arr2() As String, arr3() As Date, arr4() As Date, arr5() As Range, arr6() As Range
    msg = "arr1 " & IIf(SafeArrayGetDim(arr1) > 0, "数组不为空!", "数组为空!")
    arr2 = Split("一、二、三、四、五、六", "、")
    msg = msg & vbCrLf & "arr2 " & IIf(SafeArrayGetDim(arr2) > 0, "数组不为空!", "数组为空!")
    msg = msg & vbCrLf & "arr3 " & IIf(SafeArrayGetDim(arr3) > 0, "数组不为空!", "数组为空!")
    ReDim arr4(1 To 100)
    msg = msg & vbCrLf & "arr4 " & IIf(SafeArrayGetDim(arr4) > 0, "数组不为空!", "数组为空!")
    ReDim arr6(1 To 256, 1 To 65536)
    msg = msg & vbCrLf & "arr5 " & IIf(SafeArrayGetDim(arr5) > 0, "数组不为空!", "数组为空!")
    msg = msg & vbCrLf & "arr6 " & IIf(SafeArrayGetDim(arr6) > 0, "数组不为空!", "数组为空!")
    MsgBox msg
    End Sub
      

  5.   


    未初始化时使用Lbound或ubound会出错。就利用这种方法定义一个函数捕获出错就是空数组。