Access VBA пытается завершить возвращаемое значение функции - PullRequest
0 голосов
/ 07 июля 2019

Я строю базу данных Access, используя некоторый код VBA. Я сделал очень простой класс и функцию, которая создает экземпляр этого класса. Выполнение этой функции приводит к ошибке 91: переменная объекта или переменная блока не установлены. После отладки я обнаружил, что Access пытается завершить созданный объект, и завершение функции завершения приводит к ошибке.

Я намеревался создать фабрику для MyObject, чтобы создать объект и инициализировать его с заданными аргументами. Я снял все это, чтобы найти проблему, и теперь я ошеломлен. Может кто-то указать, что я делаю неправильно, потому что я понятия не имею.

Класс, который я создал, называется MyObject:

Private Sub Class_Initialize()
    'does literally nothing
End Sub

Private Sub Class_Terminate()
    'does literally nothing
End Sub

Функция, которую я сделал для инициализации класса, расположенного в другом модуле:

Public Function createMyObject(someArg As String) As MyObject
    Set createMyObject = New MyObject
End Function

Я, очевидно, ожидал, что функция createMyObject будет возвращать экземпляр MyObject, но выдает ошибку 91. Отладка привела меня к подпрограмме Class_Terminate в MyObject, где ошибка выдается в строке «end sub».

1 Ответ

0 голосов
/ 07 июля 2019

Попробуйте использовать свойство:

Option Compare Database
Option Explicit

Private mTest As Variant

Private Sub Class_Initialize()
    'does literally nothing
End Sub

Private Sub Class_Terminate()
    'does literally nothing
End Sub

Public Property Get Test() As Variant    
    Test = mTest    
End Property

Public Property Let Test(ByVal NewValue As Variant)    
    mTest = NewValue    
End Property

, а затем:

Public Function CreateMyObject(SomeArg As String) As MyObject

    Set CreateMyObject = New MyObject
    CreateMyObject.Test = SomeArg

End Function

, которое можно назвать так:

Set o = CreateMyObject("Joe")
Debug.Print o.Test
...