View Single Post
  #1   Report Post  
Posted to microsoft.public.excel.programming
JMB JMB is offline
external usenet poster
 
Posts: 2,062
Default Determining whether dynamic array has been used

This seemed to work okay for me. It returns a user defined error code (2001)
if the argument is not an array, which you can remove if you like or do
something else.

Function IsDimmed(arrArg As Variant) As Variant
Dim lngUbound As Long

If IsArray(arrArg) Then
On Error Resume Next
lngUbound = UBound(arrArg)
IsDimmed = IIf(Err.Number, False, True)
Else: IsDimmed = CVErr(2001)
End If
End Function




"MDW" wrote:

Say I've got an array of user-defined variables. I don't know how many
"slots" I'm going to need, so I dimension it as a dynamic array.

Dim udtSheets() As MyDataType

When I want to add a new slot, I get the UBound.

ReDim Preserve udtSheets(UBound(udtSheets)+1)

However, the first time I try this, I get a "subscript out of range" error
because the zero-eth slot hasn't been done yet. I'm trying to find a VBA
function that can tell me whether that has happened yet. Something like

If HasBeenRedimmed(udtSheets) Then

ReDim Preserve udtSheets(UBound(udtSheets)+1)

Else

ReDim Preserve udtSheets(0)

End If


I tried "IsArray" and it returns True even if there have been no slots used.
For some reason I can't create my own function because Excel won't let me
pass a UDT array as a function parameter.

TIA.

--
Hmm...they have the Internet on COMPUTERS now!