VB在预先判断数组大小上好象很差。考察下面这个子过程:Private Sub Test_Click()
Dim ary1() As Byte
Dim ary2() As ByteReDim ary1(0)
Debug.Print VarType(ary1) '8209 字节数组
Debug.Print LBound(ary1) '0,没有问题
Debug.Print UBound(ary1) '0,没有问题ary1 = ary2Debug.Print VarType(ary1) '8209 字节数组
Debug.Print LBound(ary1) '这里将报错,错误9:下标越界
Debug.Print UBound(ary1)
End Sub不知道有没有方法可以知道一个动态数组是否已经给定范围?从而避免错误9发生,而不是在发生错误后去处理。这个问题提出来主要的用途在于:例如你用GetChunk从数据库提取图片数据,基本上的操作是就有点类似上面的例子。先把接受数据的数组Redim aryBety(0),然后aryBety=GetChunk(1024, ...)
接下来,
假如是空的,你将得到一个如上例一样的没有划定范围的数组;
假如只有一个字节,你得到一个aryBety(0),索引0里放了这个字节。现在希望不使用On Error错误处理来直接给出是否继续GetChunk的条件,那就需要能够直接判断返回的数组是否是空的。

解决方案 »

  1.   

    即使使用 
    On Error Goto ErrorHandler
    IF UBound(ary)<1023 THEN
       blnStop=TRUE
    END IF
    ...
    ErrorHandler:
    IF Err.Number=9 THEN Resume Next我就不知道这个Resume Next是Resume到哪里?到If结构里面呢,还是IF结构之后的语句?这把事情弄得相当复杂郁闷
      

  2.   

    On Error Goto ErrorHandler
    Dim tmpArrLen As Long
    tmpArrLen = UBound(arr)
    If Err.Number<>0 Then
       Err.Clear
       '其他处理语句
    End If