クラスモジュールのエクスポート・インポート
作成したクラスモジュールを、他のブックのプロジェクトでも使用できるようにするには、クラスモジュールを単独のファイルに保存します。
まず、プロジェクトエクスプローラにあるクラスモジュールAccessLogの上で右クリックして、メニューを表示し、[ファイルのエクスポート]を選びます。

作成したクラスのオブジェクト名が、そのまま保存するファイル名になっています。これでよければ[保存]ボタンを押すと、ファイルに保存されます。
他のブックでこのクラスモジュールを使う場合は、プロジェクトエクスプローラの上で右クリックすると表示されるメニューから、[ファイルのインポート]を選びます。

保存したクラスモジュールのファイルを選択すれば、プロジェクトにクラスが追加されます。
あとは、標準モジュールを追加し、DimステートメントとNewキーワードでクラスのインスタンスを作成して、プロシージャで使用します。
今回作成したサンプルプログラム
作成した標準モジュールModule1とクラスモジュールAccessLogのコードは、以下の通りです。
Sub ログの作成() Dim Mylog As New AccessLog With Mylog .PathName = "c:" .CreateLog End With End Sub
Public PathName As String Sub CreateLog() Dim UserInfo As Variant Dim UserCnt As Integer Dim Fname As String Dim LogMsg As String Dim DateName As String UserInfo = ActiveWorkbook.UserStatus UserCnt = UBound(UserInfo, 1) DateName = Replace(Date, "/", "-") Fname = PathName & "\AccessLog" & DateName & ".txt" Set Fsobj = CreateObject("Scripting.FileSystemObject") Set txt = Fsobj.CreateTextFile(Fname, True) For i = 1 To UserCnt LogMsg = LogMsg & UserInfo(i, 1) & ":" & UserInfo(i, 2) & Chr(13) Next txt.WriteLine LogMsg txt.Close End Sub
まとめ
本稿では、簡単な例を使って、Excel VBAでクラスを作成し利用するテクニックを紹介しました。
「クラスの作成」と言うと、難しいのではという先入観からつい構えがちになりがちですが、「1つのコードをいろいろと形を変えて再利用する」と考えればさほど難しいテクニックではありません。Visual Basic 2005やJavaのような本格的なオブジェクト指向言語のクラス作成とは少しやり方が違いますが、「1つのクラスから複数のオブジェクトを作成して利用する」という考え方はVBAのクラスも変わりありません。
クラスをうまく利用して、効率のよいマクロ開発をしてみるのも良いのではないでしょうか。


