システム開発ブログ

VBA

.NET

システムソリューション部

【.NET】.NETで作成したDLLをVBAで使用する

みなさん、こんにちは。

始めにVisualStudioでクラスライブラリプロジェクトを作成します。
プロジェクトが作成されたら、[プロジェクト]→[プロパティ]→[COM相互運用機能の登録]にチェックを入れます。
基本的には、これだけでVBAから使用できるようになります。

以下はサンプルの.NETのコードです。
Imports System.IO
Imports System.Runtime.InteropServices

<ClassInterface(ClassInterfaceType.None)> _
Public Class COMSample
    Implements ICOMSample

    Public Sub Method1(
        ByVal vsPath As String,
        ByVal vsMoji As String) Implements ICOMSample.Method1
        Using sw As New StreamWriter(vsPath, True)
            sw.WriteLine(vsMoji)
        End Using
    End Sub

End Class
クラスにClassInterface属性を付与し、インターフェースを作成することでコード補完機能を使用できます。
「ClassInterfaceType.AutoDual」もしくは「ClassInterfaceType.None」を指定します。
「ClassInterfaceType.AutoDual」を指定した場合にはインターフェースが自動で作成されますが、
「ClassInterfaceType.None」を指定した場合には自動で作成されないので、自前でインターフェースを作成し実装します。

プロジェクトをビルドすると、出力先にdllとタイプライブラリファイル(.tlb)が作成されます。
後は、Excelであれば、VisualBasicEditorの[ツール]→[参照設定]で作成されたタイプライブラリファイルを参照します。
参照設定後は通常と同じコードでdllの呼び出しが行えます。

以下はExcelVBAのコードです。
Sub ボタン1_Click()
    Dim sample As New COMSample.COMSample
    Call sample.Method1("c:\test.txt", "VBAから呼び出し")
End Sub
ちなみに、検証環境は.NETFramework2.0、Excel2003ですが、Excel2000ではエラーになってしまい動作しませんでした。
.NETFrameworkのバージョン、Excelのバージョンにより動作しない場合があるようです。

システム開発の成功メソッドがわかる冊子をお問い合わせで無料プレゼント ≫

この記事に関連する記事の一覧


システム開発ブログ

Twitterでilovex_officialをフォローしてください

カテゴリー

以前の部署別ブログ

ページのトップ