Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


13484 / 13646 ツリー ←次へ | 前へ→

【5215】DLL関数の呼び出し方法 チャオ 03/4/27(日) 3:53 質問
【5216】ChDir ActiveWorkbook.Path こう 03/4/27(日) 19:08 回答
【5217】Re:ChDir ActiveWorkbook.Path チャオ 03/4/27(日) 23:02 お礼

【5215】DLL関数の呼び出し方法
質問  チャオ  - 03/4/27(日) 3:53 -

引用なし
パスワード
   C++などで作成したDLLから関数を呼ぶ場合、パスが通っている場所にDLLを置けば
Declare Function Test Lib "test.dll" (ByVal a As Long) As Long
というような宣言すればいいのですが、起動するエクセルファイルと同じ場所に
DLLを置くと”ファイルが見つかりません test.dll”というエラーがでてしまいます。
"test.dll"のところの指定を"c:\test\test.dll"のように
絶対パスで指定すれば問題なく動作します。
DLLの場所を相対パスで指定するにはどうすればよろしいのでしょうか。

配布時にインストールを簡易化するために、できればエクセルファイルと同じ
ディレクトリにDLLを置きたいと思っています。

よろしくお願いいたします。

【5216】ChDir ActiveWorkbook.Path
回答  こう E-MAIL  - 03/4/27(日) 19:08 -

引用なし
パスワード
   チャオ さん,こんにちわ。


>Declare Function Test Lib "test.dll" (ByVal a As Long) As Long
>というような宣言すればいいのですが、起動するエクセルファイルと同じ場所に
>DLLを置くと”ファイルが見つかりません test.dll”というエラーがでてしまいま>DLLの場所を相対パスで指定するにはどうすればよろしいのでしょうか。

#".\test.dll"とか試してみたけどダメでした。
DLLの参照先は,カレントパスやsystem32などで,VBではカレントパスに
DLLをおくとキチンと参照してくれます。

じゃ,なんでExcelVBAはカレントパスにおいてもダメなの?
ということで調べてみたら,
Excelはカレントパスは[ツール]-[オプション]-[全般]で設定する,
『カレントフォルダ』で指定されているようです。

ですから,方法としては,
Declare で相対パスを指定するんではなく,"test.dll"と記述しておき

(1)DLLをカレントフォルダに格納する。
か,
(2)任意のフォルダに格納し,
 (a)カレントパスをBOOKが存在するフォルダに変更する。
   Application.DefaultFilePath="D:\test"
 (b)VBA実行時に,BOOKが存在するフォルダに変更する
   ChDir ActiveWorkbook.Path

があると思います。

>エクセルファイルと同じディレクトリにDLLを置きたい
ですので,上記(b)ですかね。

【5217】Re:ChDir ActiveWorkbook.Path
お礼  チャオ  - 03/4/27(日) 23:02 -

引用なし
パスワード
   ▼こう さん:
ありがとうございます。

ChDirも試してみてはいたのですが
カレントドライブがC:で、作業中のHDDがD:だったため
うまくいってなかったようでした。
  ChDrive ActiveWorkbook.Path
  ChDir ActiveWorkbook.Path
とドライブごと変更してあげるとうまくいきました。

しかし、VBでもCでも他の言語でも、たいていカレントパスに置いておけば
パス指定の必要はないのに、エクセルだけ謎ですね^^;

Application.DefaultFilePath=ActiveWorkbook.Path
とすれば、[ツール]-[オプション]-[全般]で設定するカレントフォルダを
マクロで変更できますが、これだとエクセルの再起動後に有効になるようでした。

13484 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free