我有一个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应用程序中成功接收对象需要做什么?
答案 0 :(得分:0)
用户定义的类型在VBA中非常有限 例如,从Access本身,你不能这样做:
?TypeName(Application.Run("MyTestTypeFunction"))
您将收到运行时错误“5”:无效的过程调用或参数。
UDF的可见性非常有限,以至于根本不可见外部世界
Application.Run
使用OLE自动化来执行函数调用。由于您的UDF仅在数据库范围内已知且未在任何地方导出,因此外部世界无法使用任何类型信息,并且在{.1}}中使用它将在访问本身和从.Net调用时通过扩展失败
如果你的函数只是返回一个字符串,它将完美地工作。