UBound

で、VB6ではサイズ0の配列に対し、UBoundをするとエラーになるのですが、世の中には同じことで悩んでいる人もいるもんで……。

http://www.jnishida.com/blog/archives/2005/07/vbvba_ubound1_1.htm

ただし、Redim の際は注意が必要です。

   1	Option Explicit
   2
   3 Private Declare Function _
   4 SafeArrayAllocDescriptor Lib "oleaut32" _
   5   (ByVal cDims As Long, ByRef ppsaOut() As Any) As Long
   6
   7 Private Type Address
   8   name  As String
   9   number As Long
  10   street As String
  11   town  As String
  12   state As String
  13   zip  As Long
  14 End Type
  15
  16 Private Sub Command1_Click()
  17   Dim addressArray() As Address
  18   SafeArrayAllocDescriptor 1, addressArray
  19   
  20   Dim l As Long: l = UBound(addressArray)
  21   If l < 0 Then
  22     ReDim addressArray(l + 1)
  23   Else
  24     ReDim Preserve addressArray(l + 1)
  25   End If
  26
  27   With addressArray(0)
  28     .name = "Jim Dandy"
  29     .number = 61
  30     .street = "South St"
  31     .town = "New Providence"
  32     .state = "NJ"
  33     .zip = 7974
  34   End With
  35 End Sub
20〜25行のように、インデックスの最大値がゼロか否かで場合分けをせねばなりません*1
VB6では任意の型を受け取るサブルーチンを書くことはできませんから、この処理をサブルーチン化することもできません。
しょーがないね。

*1:しないと、「インデックスが有効範囲にありません」というエラーが発生します。