Excel VBA質問箱 IV

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

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


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

【69114】DLL を探すパスの設定 tenjinyama 11/5/18(水) 16:20 発言[未読]
【69115】Re:DLL を探すパスの設定 momo 11/5/18(水) 17:52 発言[未読]
【69116】Re:DLL を探すパスの設定 tenjinyama 11/5/18(水) 18:11 お礼[未読]
【69142】Re:DLL を探すパスの設定 sasa 11/5/20(金) 15:44 回答[未読]
【69144】Re:DLL を探すパスの設定 tenjinyama 11/5/20(金) 16:57 発言[未読]
【69147】Re:DLL を探すパスの設定 sasa 11/5/20(金) 17:41 回答[未読]
【69157】Re:DLL を探すパスの設定 tenjinyama 11/5/21(土) 0:12 お礼[未読]

【69114】DLL を探すパスの設定
発言  tenjinyama  - 11/5/18(水) 16:20 -

引用なし
パスワード
   DLL を任意のフォルダーに置いて vba から呼びたいのですが、WindowsXP のシステム環境変数にパスを追加しても DLL を見つけてくれません。
vba の Environ 関数で PATH を調べるとシステム環境変数 PATH の定義とは異なっています。
どこで設定するのでしょうか。

【69115】Re:DLL を探すパスの設定
発言  momo  - 11/5/18(水) 17:52 -

引用なし
パスワード
   ▼tenjinyama さん:

ht tp://support.microsoft.com/kb/180410/ja

こんなのは該当しますか?

【69116】Re:DLL を探すパスの設定
お礼  tenjinyama  - 11/5/18(水) 18:11 -

引用なし
パスワード
   ▼momo さん:

>ht tp://support.microsoft.com/kb/180410/ja
>
>こんなのは該当しますか?

ありがとうございます。
これだと思います。
でも、解決は簡単ではないんですね。
最近OSのセキュリティが厳しくなってきて、以前のように System32 フォルダにコポーしてもらことが出来なくなってきたので、悩んでいます。

【69142】Re:DLL を探すパスの設定
回答  sasa  - 11/5/20(金) 15:44 -

引用なし
パスワード
   ▼tenjinyama さん:
>最近OSのセキュリティが厳しくなってきて、以前のように System32 フォルダにコポーしてもらことが出来なくなってきたので、悩んでいます。

簡単な2案を...
dllのフォルダへ ChDir してdllの関数を呼ぶ。

明示的にOpenイベントあたりで LoadLibrary関数(api)でdllファイルをロードする。

【69144】Re:DLL を探すパスの設定
発言  tenjinyama  - 11/5/20(金) 16:57 -

引用なし
パスワード
   sasa さん

>簡単な2案を...
>dllのフォルダへ ChDir してdllの関数を呼ぶ。
>
>明示的にOpenイベントあたりで LoadLibrary関数(api)でdllファイルをロードする。

Excel から呼ぶ関数ですが、Excel vba でどのように動的にロードが実現可能か分らないでいます。

Excelのカレントフォルダに置いておけばよいのは分っているのですが、カレントフォルダの設定に制約を設けるのはトラブルの元なので、この方法は除外しました。

【69147】Re:DLL を探すパスの設定
回答  sasa  - 11/5/20(金) 17:41 -

引用なし
パスワード
   ▼tenjinyama さん:
>Excel から呼ぶ関数ですが、Excel vba でどのように動的にロードが実現可能か分らないでいます。
>
>Excelのカレントフォルダに置いておけばよいのは分っているのですが、カレントフォルダの設定に制約を設けるのはトラブルの元なので、この方法は除外しました。

全然意味を理解してもらっていないようなので少し詳しくかきます。

dllファイルはもちろん任意のフォルダにあるとします。
例として ThisWorkbookと同じフォルダにxxx.dllがあると仮定して...

案1.dllのフォルダへ ChDir してdllの関数を呼ぶ。
Sub test1()
 Dim Path$
 Path = ThisWorkbook.Path
 ChDrive Path
 ChDir Path
 'ここでdllの関数を用いる
End Sub

案2.明示的にOpenイベントあたりで LoadLibrary関数(api)でdllファイルをロードする。
Private Sub Workbook_Open()
 Dim Dll$
 Dll = ThisWorkbook.Path & "\xxx.dll"
 LoadLibrary Dll
End Sub
'これ以降dllの関数はいつでも使える。
'LoadLibraryのDeclareステートメントは自分で記述してください。

【69157】Re:DLL を探すパスの設定
お礼  tenjinyama  - 11/5/21(土) 0:12 -

引用なし
パスワード
   >全然意味を理解してもらっていないようなので少し詳しくかきます。

はい、わかっていません(でした)。

>案2.明示的にOpenイベントあたりで LoadLibrary関数(api)でdllファイルをロードする。
>Private Sub Workbook_Open()
> Dim Dll$
> Dll = ThisWorkbook.Path & "\xxx.dll"
> LoadLibrary Dll
>End Sub
>'これ以降dllの関数はいつでも使える。

たいへんすんなり実行できました。
ありがとうございました。

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