AB で作成したDLLを、VBAで利用したいのですが・・・

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
Take'N.

AB で作成したDLLを、VBAで利用したいのですが・・・

#1 投稿記事 by Take'N. »

いつも、参考にさせて頂いております。

ABでDLLを作成することが出来ますが、
作成したDLLを、VBAから利用することが出来ません。

過去ログに、作成したDLLを、エクセルVBAにて利用されている方の
話がありましたが、ABやエクセルのバージョンについての記載を
発見出来ず、現在試行錯誤の最中です。

Ver4.x と 3.x の両方でDLLを作成して見ましたが、
結果は同じでした。
Access VBAで「参照設定」も出来ないし、直接呼び出す方法も試しましたが
「~DLLが見つかりません。~」と言った様なエラーでダメでした。

何か「おまじない」を、忘れてしまっているのでしょうか?

当方の環境は
OS:XP Pro VBA:Access2000 AB:Ver4.x 、3.x
です。
イグトランス
記事: 899
登録日時: 2005年5月31日(火) 17:59
お住まい: 東京都
連絡する:

#2 投稿記事 by イグトランス »

ABにはVBで参照設定して使えるDLLを作れる環境が整っていません。
ABで作成したDLL(関数をExportで公開したもの)をVB/VBAで使うにはDeclareで宣言することになります。
VBのDeclareのLib部分ではDLLの指定にフルパスを指定できるはずです。念のためフルパスで指定してみてはどうでしょうか。

引数は大部分がAB/VBで同じように扱えますが細かい違いに気を付けて下さい。
まず,ByRef/ByValを省略したときの扱いがAB/VBでは異なっているので,AB/VB共に省略しないことをお勧めします。
ABでTへのポインタ型にしている場合は,(一次元配列を渡すつもりでも)VBではTのByRef引数にします。
VBで文字列 (String)を引数にしたければ,VBではByValなString型の引数とし,ABではByValな*Byte型の引数とします。VBが適切に変換をしてくれます。

Variant型や多次元配列を受け渡すことも不可能ではありませんが,ABでは単なる構造体へのポインタとなり,
その操作にはAPI関数を使いVBのように気楽に扱える代物ではなくなっています。
少なくとも現時点ではAB/VB間のやりとりには使わないようにするのがお勧めです。
Take'N
記事: 2
登録日時: 2005年5月31日(火) 15:26

ご回答ありがとうございます。

#3 投稿記事 by Take'N »

イグトランス さま。
早速のご回答ありがとうございます。

現状では、やはり、と言うべきかVBAからAB作成のDLLへは、
困難なのですね。
今後のバージョンアップに期待します。
イグトランス
記事: 899
登録日時: 2005年5月31日(火) 17:59
お住まい: 東京都
連絡する:

#4 投稿記事 by イグトランス »

参照設定して使いたいと言うのであればたしかに困難ですが,
Declareで使うほうでしたらVARIANTなどVB特有のものを受け渡ししようとでもしない限り満足に使えます。
teka

#5 投稿記事 by teka »

ABで作ったDLLを使ってエクセルのユーザーフォームをサブクラス化して
ドラッグアンドドロップされたファイル名を取得することもできます。

私が今も使っているオフィス97ではAddressOf演算子がサポートされて
いないのでこんなことをしたりしています。

2000からAddressOf演算子がサポートされたようですけど。
返信する