Пожалуйста, кто-нибудь, кто понимает массивы VBA (Access 2003), поможет мне со следующим кодом.
Идея состоит в том, что ClassA содержит динамический массив экземпляров ClassB.Динамический массив начинается пустым.Когда вызывающие абоненты вызывают ClassA.NewB (), создается новый экземпляр ClassB, добавляется в массив и возвращается вызывающему.Проблема заключается в том, что я не могу вернуть новый экземпляр ClassB вызывающей стороне, но получаю «Ошибка выполнения 91: переменная объекта или переменная блока не установлена»
Кроме того, при выполнении UBound () происходит небольшой WTFне удается, но перенос точно такого же вызова в другую функцию работает!?!?(Следовательно, MyUbound ())
Я из C ++ фона, и все эти вещи VBA немного странные для меня!
Спасибо за любую помощь!
Основной код:
Dim a As clsClassA
Dim b As clsClassB
Set a = New clsClassA
a.Init
Set b = a.NewB(0)
clsClassA:
Option Compare Database
Private a() As clsClassB
Public Sub Init()
Erase a
End Sub
Public Function NewB(i As Integer) As Variant
'If (UBound(a, 1) < i) Then ' FAILS: Runtime error 9: Subscript out of range
If (MyUBound(a) < i) Then ' WORKS: Returns -1
ReDim Preserve a(0 To i)
End If
NewB = a(i) ' FAILS: Runtime error 91: Object variable or With block variable not set
End Function
Private Function MyUBound(a As Variant) As Long
MyUBound = UBound(a, 1)
End Function
clsClassB:
Option Compare Database
' This is just a stub class for demonstration purposes
Public data As Integer