调用从VB.NET代码返回UDT的Access Interop函数会引发错误

时间:2013-02-14 22:00:01

标签: vba ms-access com interop

我有一个Microsoft Access 2000数据库。有一个声明类型的模块:

Type MyTestType
    Something As String
End Type

还有一个返回上述类型的函数:

Function MyTestFunction() As MyTestType    
    Dim a As MyTestType        
    MyTestFunction = a    
End Function

我正在尝试使用VB.NET自动从.NET 4.0控制台应用程序调用该函数。我有一个方法如下:

Sub ProcessAccessFunction()
    Dim access As New ApplicationClass()

    Try
        access.OpenCurrentDatabase("c:\MyTestFolder\MyTestDatabase.mdb", False)
        Dim result = access.Run("MyTestFunction")
    Finally
        access.Quit(AcQuitOption.acQuitSaveNone)
    End Try
End Sub

但是,我收到错误消息“值不在预期范围内”。在VB.NET应用程序中成功接收对象需要做什么?

1 个答案:

答案 0 :(得分:0)

用户定义的类型在VBA中非常有限 例如,从Access本身,你不能这样做:

?TypeName(Application.Run("MyTestTypeFunction"))

您将收到运行时错误“5”:无效的过程调用或参数
UDF的可见性非常有限,以至于根本不可见外部世界 Application.Run使用OLE自动化来执行函数调用。由于您的UDF仅在数据库范围内已知且未在任何地方导出,因此外部世界无法使用任何类型信息,并且在{.1}}中使用它将在访问本身和从.Net调用时通过扩展失败

如果你的函数只是返回一个字符串,它将完美地工作。