UBound
で、VB6ではサイズ0の配列に対し、UBoundをするとエラーになるのですが、世の中には同じことで悩んでいる人もいるもんで……。
http://www.jnishida.com/blog/archives/2005/07/vbvba_ubound1_1.htm
ただし、Redim の際は注意が必要です。
20〜25行のように、インデックスの最大値がゼロか否かで場合分けをせねばなりません*1。 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
VB6では任意の型を受け取るサブルーチンを書くことはできませんから、この処理をサブルーチン化することもできません。
しょーがないね。
*1:しないと、「インデックスが有効範囲にありません」というエラーが発生します。