我使用了option base 0,如果我用redim a(0)的时候,它就会有一个元素,我使用redim a(-1),这时又说我下标越界,我该如何定义一个空数组呢?

解决方案 »

  1.   

    不行啊,a = empty,执行时VB提示“使用了一个Visual Basic不支持的自动化类型”
    或者是我的用法有错?
      

  2.   

    错了错了。竟然记混了应该这样:
    Dim a() As Byte
    ReDim a(0)
    Erase a
    Debug.Print a(0)  'a()已经被销毁了,这句不能执行。
      

  3.   

    都一样Private Sub Form_Load()
    Dim a() As String
    ReDim a(0)
    a(0) = "AAAAAA"
    Debug.Print a(0)
    Erase a
    Debug.Print a(0)
    End Sub
      

  4.   

    喔,erase的确是可以,但是我发现一旦erase了之后,使用lbound和ubound的时候就会出错,本来我是希望使用for循环,如果数组是空的话,那么ubound应该比起lbound要小,则循环不执行,但现在出错了,我应该怎么办?难道说每次执行for之前,均要判断数组是否为空?
      

  5.   

    恭喜猜对了  ^_^不过可以这样:
    Private Sub Form_Load()
        Dim a() As Byte
        ReDim a(1)
        Debug.Print GetUBound(a)
        Erase a
        Debug.Print GetUBound(a)
    End SubFunction GetUBound(v)
        On Error GoTo SkipErr
        GetUBound = UBound(v)
        Exit Function
    SkipErr:
        Err.Clear
        GetUBound = -1
    End Function