【问题标题】:Access VBA tries to terminate return value of FunctionAccess VBA 尝试终止函数的返回值
【发布时间】:2019-11-17 05:37:05
【问题描述】:

我正在使用一些 VBA 代码构建一个 Access 数据库。 我制作了一个非常简单的类和一个创建该类实例的函数。执行此函数会产生错误 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。调试导致我进入 MyObject 中的 Class_Terminate Sub,错误在“end sub”行抛出。

【问题讨论】:

  • 调试的时候如何调用这个函数?

标签: vba ms-access


【解决方案1】:

尝试使用属性:

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

【讨论】:

    猜你喜欢
    • 2019-09-29
    • 2013-01-21
    • 2013-11-17
    • 1970-01-01
    • 2015-10-05
    • 2015-01-04
    • 2017-06-04
    • 2022-06-15
    • 1970-01-01
    相关资源
    最近更新 更多