- 締切済み
DLLを作成してVBAから使用する方法は?
Visual Basic 2005 Express EditionでDLLを作成して,エクセルVBAから使用する方法を教えてください。 DLLで提供する関数は,仮に Public Function TRIM2(ByVal str1 As String) As String TRIM2 = trim(str1) End Function とします。 DLLの作り方とエクセルVBAでの利用のやり方が判りません。 一応,DLLらしきものを作りエクセルVBAから参照を試みましたが,「指定されたファイルへの参照は登録できません。」というエラーになります。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
Express Edition で動作確認しました。何かと面倒ですね。 おっしゃるとおり、.tlb ファイルは作成されませんでした。 「アセンブリを COM 参照可能にする」にチェックをつけてビルドし、 出来た dll を配布場所にコピーしてから、regasm.exe を使って以下のように入力してください(pathは具体的な配布場所)。 regasm (path)\hoge.dll /tlb:(path)\hoge.tlb /codebase これで、COM 登録が完了し、tlb ファイルが作成されます。 この状態でVBAで参照設定してみてください。 以上試してみてください。 #COM 登録解除は regasm の /unregister オプションです。
Express Edition には、確かにありませんでした。。。m(__)m プロジェクトのプロパティの「アプリケーション」タブ内に「アセンブリ情報」ボタンがあり、その中に「アセンブリを COM 参照可能にする」というチェックをONにしてみてください。
お礼
ありがとうございます。やってみましたが変化がないようです。タイプライブラリも作成されていないようです。
- redfox63
- ベストアンサー率71% (1325/1856)
COM(Component Object Model)として DLLをコンパイルしてtlb(タイプライブラリ)を生成しないと VBAから使用できないですよ VB2005側のDLLプロジェクトのプロパティ > コンパイルの 『COM相互運用機能の登録』にチェックをつけておきます ExcelのVBEで ツール > 参照設定で VB2005で生成したComクラスの名前を探します 見つからなければDLLを生成したフォルダーにあるTLBファイルを 参照ボタンから探しましょう VB2005で作成したCOMはインスタンス経由で関数にアクセスしますので VBA側では Dim VBComObj as new MyComClass Dim ss as string ss = VBComObj.Trim2( " 123 " ) といった使い方になります 作成したCOMクラスが MyComClassだと仮定しています
お礼
ありがとうございます。 ご回答いただいた内容を元にググっており,大変参考になっています。 ただ,自分が使っているVisual Basic 2005 Express Editionには, VB2005側のDLLプロジェクトのプロパティ > コンパイルの 『COM相互運用機能の登録』にチェックをつけておきます というのが無いみたいです。(見つけられないだけかも?) Express Editionにはタイプライブラリを作成する機能がないのでしょうか?それすら判りません(泣) すみませんがもう少し助けてください。 よろしくお願いします。
お礼
ご回答ありがとうございます。 私の開発環境にはregasm.exe がありません。 もう少しのところにきたようです。 よろしくお願いします。