Library code snippets
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
Related articles
Related discussion
-
VB6, SQL 2005 & DMO
by elajaunie3 (1 replies)
-
sending sms from pc
by sriraj20074 (0 replies)
-
Automating Excel from VB6.0
by epurdy (0 replies)
-
VB6 system conversion using VBA to Word 2007
by b.macgregor@vodamail.co.za (0 replies)
-
video not working with visual basic
by Jupiter 2 (9 replies)
Related podcasts
-
Christian Beauclair
14 mai 2008 (�mission #0074) ::.Christian Beauclair: Stratégies de migration VB6 vers .NET Nous discutons avec Christian Beauclair des stratégies de migration VB6 vers .NET. Entre autres, nous discutons comment utiliser le "VB 6 Code Advisor" et le "Interop Forms Toolkit" pour ajouter la puiss...
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?
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.
Here's a good article with additional options, including writing your own alternative UBound function:
http://www.vbadvance.com/arrays.htm
[1] My apologies to the author for not giving due credit - I did not see a name.[/1]
This thread is for discussions of Determining the size of a VB dynamic array.