DOBON.NET DOBON.NETプログラミング掲示板過去ログ

ExcelVBAからdllの関数を利用する方法

環境/言語:[Excel2000/Microsoft Visual Basic .NET/.NET Framework1.1/Windwows2000Pro]
分類:[.NET]

以下の手順を踏んでVBAからDLLを利用できません。
どなたか何が不足しているのかご教授をよろしく
願います。

手順1)
VB.NETで、プロジェクト名をCOM2NETtestとし、
下記のソースを作り、ビルドして
C:\COM2NETtest\bin直下にCOM2NETtest.dllを
作成しました。

Public Class NETclass

Public Function GetValue(ByVal data As String) As String
Return "このデータは、" & data
End Function

Public Function GetDate() As Date
Return Now
End Function

End Class

手順2)
デスクトップにExcelファイルを作成し、VBEを起動し、
ThisWorkBookに下記のコードを書きました。

Option Explicit

Private Declare Function GetValue Lib "C:\COM2NETtest\bin\COM2NETtest.dll" (ByVal data As String) As String

Public Sub showmsg()
MsgBox GetValue("AAAA")
End Sub

手順3)
コンパイルした後、showmsgメソッドにステップを置いて
実行したら、以下のエラーメッセージが出ます。

[エントリGetValueがDLLファイル
C:\COM2NETtest\bin\COM2NETtest.dll内に見つかりません。]
> Private Declare Function GetValue Lib "C:\COM2NETtest\bin\COM2NETtest.dll" (ByVal data As String) As String

VB.NET では、Declare で呼び出すタイプの DLL を作れません。

VB.NET にて作成できるDLLは、.NETのマネージDLLか、もしくは、相互運用
アセンブリによる COM コンポーネント DLL に限定されます。
ご返事ありがとうございます。

> VB.NET では、Declare で呼び出すタイプの DLL を作れません。
ということは、VBE上でdllを呼び出す方法はなく、
参照設定で指定する方法しかないということでしょうか?
ど素人の質問ですみません。よろしくお願いいたします。

■No15549に返信(魔界の仮面弁士さんの記事)
>>Private Declare Function GetValue Lib "C:\COM2NETtest\bin\COM2NETtest.dll" (ByVal data As String) As String
>
> VB.NET では、Declare で呼び出すタイプの DLL を作れません。
>
> VB.NET にて作成できるDLLは、.NETのマネージDLLか、もしくは、相互運用
> アセンブリによる COM コンポーネント DLL に限定されます。
ていうか、
> VB.NET では、Declare で呼び出すタイプの DLL を作れません。
というのはあちらの掲示板でも言いましたよね?
# というか、私の発言全部無視して同じ質問しないでほしい。。。

掲示板を移動する場合は移動する前のリンクをはったほうがよいですよ。
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=37314;id=excel
2006/04/29(Sat) 20:04:04 編集(投稿者)

> 掲示板を移動する場合は移動する前のリンクをはったほうがよいですよ。
> http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=37314;id=excel
なるほど、そんなやりとりがあったんですね。(^^;

---引用---
>>CreateObejctで使えるか調べてみます。
>いや、普通にDLLつくっただけじゃ無理ですよ。
>いろいろ面倒なことをやらないといけません。
>
>だから
>> どうすればよいかはワカリマセン。
>ってことなんです。

そういうレベルであれば、とりあえず下記を参照。
http://www.sev.or.jp/ijupiter/world/dc_interrop/dotnet_com_interrop.html

ちなみに(今回は関係ないと思いますが)環境によってはこんな問題があったりします。
http://lab.msdn.microsoft.com/productfeedback/viewfeedback.aspx?feedbackid=2c74dd2d-87d7-4b1c-a66e-acfe1957b06e
この掲示板ではマルチポストが禁止されています。「書き込みのマナーについて」をご一読のうえ、ご理解いただけますように、お願いいたします。

http://dobon.net/vb/bbs/index.html
> この掲示板ではマルチポストが禁止されています。
マルチポストではないと思うのですけどどうでしょうか?
(適切な掲示板に移っただけなのでは?)
もしマルチならば、責任は私にあるんでしょうけど。
■No15579に返信(Blueさんの記事)
> マルチポストではないと思うのですけどどうでしょうか?
> (適切な掲示板に移っただけなのでは?)
> もしマルチならば、責任は私にあるんでしょうけど。

移ったのであれば、双方にフィードバックをしなければならない、ということでしょうね。

..............................................................................................................................
じゃんぬ @ わんくま同盟, Microsoft MVP for Visual Developer - C#
http://jeanne.wankuma.com/
http://blogs.wankuma.com/jeanne/
■No15579に返信(Blueさんの記事)
>>この掲示板ではマルチポストが禁止されています。
> マルチポストではないと思うのですけどどうでしょうか?
> (適切な掲示板に移っただけなのでは?)
> もしマルチならば、責任は私にあるんでしょうけど。

この投稿がマルチポストでないとすると、マルチポストの判断は非常に難しくなります。極端な話、これをOKにしてしまうと、すべてのマルチポストの投稿は正当化される恐れがあります。よって、大変申し訳ありませんが、マルチポストであると判断させていただきます。(ご意見がある場合は、「お気楽掲示板」へお願いします。)

また、別の掲示板への投稿を勧められたBlueさんには、全く責任は無いと思います。掲示板の注意事項を知り、適切な投稿をする責任は、投稿者自身にあると思うのです。
■No15552に返信(Blueさんの記事)
> ていうか、
>>VB.NET では、Declare で呼び出すタイプの DLL を作れません。
> というのはあちらの掲示板でも言いましたよね?
> # というか、私の発言全部無視して同じ質問しないでほしい。。。
>
> 掲示板を移動する場合は移動する前のリンクをはったほうがよいですよ。
> http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=37314;id=excel

私の対応にひどくご立腹であることは察しがつきますが、
無視とは、返事を出さず終わってしまうことだと心得てます
。ですので私なりに丁重に対応したつもりですが、配慮が足
りなかったことはお詫びします。少なくともこちらへのリン
クを貼り、引き続き、対応させていただく旨をBlueさんにお
伝えすべきでした。すみませんでした。
> マルチポストではないと思うのですけどどうでしょうか?
> (適切な掲示板に移っただけなのでは?)
> もしマルチならば、責任は私にあるんでしょうけど。

お伝えします。
マルチポストに関して管理さんへの返信を
こちらに書き込みました。
http://dobon.qp.land.to/bbs/cbbs.cgi
魔界の仮面弁士さん返信ありがとうございます。

> そういうレベルであれば、とりあえず下記を参照。
> http://www.sev.or.jp/ijupiter/world/dc_interrop/dotnet_com_interrop.html

参考にしてコードを書きましたが、VB6.0からの利用方法になり、
VBAからの利用には応用できないのかなと思いました。
>
> ちなみに(今回は関係ないと思いますが)環境によってはこんな問題があったりします。
> http://lab.msdn.microsoft.com/productfeedback/viewfeedback.aspx?feedbackid=2c74dd2d-87d7-4b1c-a66e-acfe1957b06e

.NET Framework1.0ならば問題が起こらない可能性があると思いました。
> そういうレベルであれば、とりあえず下記を参照。
> http://www.sev.or.jp/ijupiter/world/dc_interrop/dotnet_com_interrop.html
>

魔界の仮面弁士さん、紹介していただいたサイト
と下記サイトを参考に、ExcelとAccessのVBAか
ら.NETで作成したDLLを利用することに成功しま
した。
開発支援用途のDLLを社内で作る計画でしたので、
本当に助かりました。
どうもありがとうございました。

http://hpcgi1.nifty.com/MADIA/VBBBS2/wwwlng.cgi?print+200503/05030034.txt
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板