Members

Technology Zones

IBM Learning Center

Articles

Hosted By

MaximumASP

Info

Rated
Read 76,791 times

Related Categories

Determining the size of a VB dynamic array

Dynamic arrays are great tools for creating a collection of values
on the fly. However, you may have run into trouble when trying to
determine if the array contains any items. The UBound() function
provides one way to tell if it does. However, if the array doesn't
officially exist yet--that is, you haven't redimensioned it with
even a single item--then this function generates an error.

To accommodate this problem, some people suggest automatically
redimensioning the array with its first item, for instance:

ReDim strCats(0)

However, why have Visual Basic create the array if it potentially may
not use it? Another often-suggested alternative is to use a counter
variable; something along the lines of:

MyUpper = 0

Sub AddValue(strValue as String)
    ReDim Preserve strCats(MyUpper)
    strCats(MyUpper) = strValue
    MyUpper = MyUpper + 1
End Sub

While this method works, the counter technique can get messy in large
applications; not to mention redundant. After all, Visual Basic already
keeps track of the current upper boundary, so it's much more efficient
to let it do the job for you.

As a more efficient method, try simply trapping for the error that the
UBound() function throws when the array doesn't contain any items
(Error 9, subscript out of range), as in:

Private Function GetUpper(varArray As Variant) As Integer
    Dim Upper As Integer
    On Error Resume Next
    Upper = UBound(varArray)
    If Err.Number Then
        If Err.Number = 9 Then
            Upper = 0
        Else
            With Err
                MsgBox "Error:" & .Number & "-" & .Description
            End With
            Exit Function
        End If
    Else
        Upper = UBound(varArray) + 1
    End If
    On Error GoTo 0
    GetUpper = Upper
End Function

© 2001 Element K Journals, a division of Element K Press LLC ("Element K"). Element K and the Element K logo are trademarks of Element K LLC

Comments

  • Re: [1136] Determining the size of a VB dynamic array

    Posted by purebuilt on 15 Oct 2006

    I agree, using error trapping to determine the array boundaries is a bad philosophy. One that is spreading and that's why a lot of simple software crashes or locks up. Where did this idea come from?

  • ...or write your own UBound function

    Posted by gazelle on 25 Aug 2004

    Personally, I don't like to deliberately cause an error, as jumps to the error handler and back make me dizzy. Besides, if you have other array references in there, it might just hide a real error.
    H...