VB.NET2003で作成したDLLファイルをAccessのVBAで
実行させようとするとエラーが出てしまいます。
例えばVB.NET2003のクラスライブラリ作成で作成したクラスに
Public Class TEST
Public Function TEST()
MsgBox("表示")
End Function
End Class
と記述してからメニューの
ビルド→ソリューションのビルド
でDLLを作成し、AccessのVBAで作成したフォームに
Option Compare Database
Private Declare Function TEST Lib "※DLLファイルへのパス" ()
Private Sub コマンド0_click()
call TEST
End Sub
と記述してからフォームのボタンを押して作成したDLLを実行させようとすると、
実行エラー:453
エントリ TEST がDLLファイル "※DLLファイルへのパス"内に見つかりません
というエラーが出てしまい、DLLが実行できません。
ネットでいろいろ調べたりしましたが、全く解決できずに困り果てています。
どうかよろしくお願いします。
ちなみに開発環境は下記のとおりです。
OS:WindowsXP Pro
開発ソフト VB.NET2003
Access2003
あー…… Declareで使いたいのですか。それは難しいかと。
VB.NET製DLLを Declareするのではなく、参照設定して使える「ActiveX DLL」として利用してみては如何でしょう?
http://www.sev.or.jp/ijupiter/world/dc_interrop/dotnet_com_interrop.html
どうしても Declare で運用したいとなると、VB6 や VB.NET、C# などでは、かなり特殊なことをやらないと関数のエクスポートができないようですから、DLL を別の言語(Managed C++ など)で作り直された方が早道かと。
魔界の仮面弁士さん、アドバイスありがとうございます。
とりあえずActiveX DLLとして利用することにしてみたんですが、
DLLをレジストリに登録して、タイプライブラリを作成後にVBAから
参照することはできたんですが、実行すると
ファイルまたはアセンブリTEST、
またはその依存関係の1つが見つかりませんでした。
というエラーが出てしまい、うまく動作しません。
ちなみにDLLファイルはAccessのldbファイルがあるのと同じフォルダに保存しています。
なお、VB.NET2003の記述内容は同じで、AccessのVBAは下記のように記述しました。
Option Compare Database
Private Sub コマンド0_click()
On Error GoTo Err_Proc
Dim obj As Test.Test
Set obj = New Test.Test
Call obj.Test
Exit Sub
Err_Proc:
MsgBox Err.Description
End Sub
自己解決できました。
DLLファイル(今回の場合はTEST.DLL)を
Access本体の実行ファイルのあるフォルダ
※(私の場合は 「C:\Program Files\Microsoft Office\2003\OFFICE11」)
へ移動させることで無事DLLファイルの実行が可能でした。
ツイート | ![]() |