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': Invalid procedure call or argument が表示されます。
UDF の可視性は非常に限られているため、外部からはまったく見えません。
Application.RunOLE オートメーションを使用して関数呼び出しを実行します。UDF はデータベースの範囲内でのみ認識され、どこにもエクスポートされないため、外部の世界では型情報を利用できApplication.Runず、.Net から呼び出す場合は、アクセス自体および拡張機能でそれを使用すると失敗します。

関数が文字列を返すだけであれば、完全に機能します。

于 2013-04-23T03:50:35.943 に答える