VB.Net2005で作成したクラスをEXCEL2000を利用して、チェーンアップしたいと考えています。VBからEXCELを操作することで一応可能ですが、パフォーマンスが悪いため、EXCEL VBAからコールしたいと考えています。
しかし、作成したクラスをCOMにする方法がわからず、悩んでおります。
なお、利用しているVB.NetがExpress版のため、COMクラステンプレートがなく、そのため、手動にて作成しなくてはなりません。
テンプレートを提供いただければ解決するかもしれませんが、どうかよろしくお願いします。
ここら辺参考になりませんかね。
VB.NETのクラスライブラリをExcelで使用するには?
http://madia.world.coocan.jp/cgi-bin/VBBBS/wwwlng.cgi?print+200603/06030045.txt
VBAからC#作成のDLLを呼び出したい
http://vsug.jp/tabid/63/forumid/53/postid/2604/view/topic/Default.aspx
返信ありがとうございます。早速、以下を参考に試してみました。
http://www.sev.or.jp/ijupiter/world/dc_interrop/dotnet_com_interrop.html
結果はEXCELでは、「オートメーションエラーです。既に存在するファイルを作成することはできません。」とのメッセージが発生し、うまくいきませんでした。VB6では、期待したとおりの結果となり、うまくいきました。
この差はどこから生じたのででしょうか?
なお、EXCELでの試験ソースを載せておきます。
Private Sub CommandButton1_Click()
Dim clsTest As ComTest2.MyComCal ← 自作のCOMクラス
Dim nNum As Long
On Error GoTo Err_Test
Set clsTest = New ComTest2.MyComCal ← ここでオートメーションエラー
Call clsTest.SetVal(3, 4)
nNum = clsTest.Add()
MsgBox "Result : nNum = " & Format(nNum, "0")
Set clsTest = Nothing
Exit Sub
Err_Test:
MsgBox Err.Description
End Sub
VB6での試したソースもほぼ同じです。
やはり、Excelでは
>VBAからC#作成のDLLを呼び出したい
>http://vsug.jp/tabid/63/forumid/53/postid/2604/view/topic/Default.aspx
のスレにもあるように、VS2005のクラスライブラリは使えないということでしょうかね?
私では力になれそうもないです。すみません。
VB.NET 2005 で、COMラッパを作成し、.NET クラスモジュールを呼び出す
よう正しくできれば、問題なく動作すると思います。
たまたま、VB6から呼び出すCOMラッパを製作していましたので、Excelの
VBAで呼び出すように変更したら問題なく動作しました。
Expressでは、確かにCOMクラスのテンプレートが無いですが、コンパイル
は正しく通ると思いますので・・・
以上。
不勉強で大変申し訳ございませんが、「COMラッパ」とは何ですか?
それから、VB6ではうまく言っているとのことですが、うまくいった方式を詳細に知りたいので、よろしければ、見本をいただければありがたいのですが。
http://msdn2.microsoft.com/ja-jp/library/zsfww439(VS.80).aspx
http://msdn2.microsoft.com/ja-jp/library/5dxz80y2(VS.80).aspx
この辺をお読み下さい。
以上。
ツイート | ![]() |