• 締切済み

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から参照を試みましたが,「指定されたファイルへの参照は登録できません。」というエラーになります。

みんなの回答

noname#259269
noname#259269
回答No.3

Express Edition で動作確認しました。何かと面倒ですね。 おっしゃるとおり、.tlb ファイルは作成されませんでした。 「アセンブリを COM 参照可能にする」にチェックをつけてビルドし、 出来た dll を配布場所にコピーしてから、regasm.exe を使って以下のように入力してください(pathは具体的な配布場所)。 regasm (path)\hoge.dll /tlb:(path)\hoge.tlb /codebase これで、COM 登録が完了し、tlb ファイルが作成されます。 この状態でVBAで参照設定してみてください。 以上試してみてください。 #COM 登録解除は regasm の /unregister オプションです。

QZE00555
質問者

お礼

ご回答ありがとうございます。 私の開発環境にはregasm.exe がありません。 もう少しのところにきたようです。 よろしくお願いします。

noname#259269
noname#259269
回答No.2

Express Edition には、確かにありませんでした。。。m(__)m プロジェクトのプロパティの「アプリケーション」タブ内に「アセンブリ情報」ボタンがあり、その中に「アセンブリを COM 参照可能にする」というチェックをONにしてみてください。

QZE00555
質問者

お礼

ありがとうございます。やってみましたが変化がないようです。タイプライブラリも作成されていないようです。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

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だと仮定しています

QZE00555
質問者

お礼

ありがとうございます。 ご回答いただいた内容を元にググっており,大変参考になっています。 ただ,自分が使っているVisual Basic 2005 Express Editionには, VB2005側のDLLプロジェクトのプロパティ > コンパイルの 『COM相互運用機能の登録』にチェックをつけておきます というのが無いみたいです。(見つけられないだけかも?) Express Editionにはタイプライブラリを作成する機能がないのでしょうか?それすら判りません(泣) すみませんがもう少し助けてください。 よろしくお願いします。