1

我有一个 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 应用程序中成功接收对象?

4

1 回答 1

0

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

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

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

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

于 2013-04-23T03:50:35.943 回答