AccessのDoCmdオブジェクトのいくつかのメソッドを使うと、テーブルやクエリのデータをExcelやCSV形式で外部にエクスポートしたり、フォーム等のオブジェクトを別のAccessのデータベースにエクスポートしたりすることができます。
しかしこのとき、標準モジュールを他のデータベースに出すことはできますが、テキストファイルとしてエクスポートすることはできません。またフォームやレポートのクラスモジュールについてはモジュールのみをエクスポートするということはできません。
一方、VBE(モジュールを編集する方のウィンドウ)にはメニュー操作として「ファイルのエクスポート」という機能がありますが、こちらはひとつずつしかエクスポートできないため、たくさんのモジュールを一度に出力するのは非常に面倒です。
そこで、VBEのエクスポート機能をプログラムから呼び出して、データベース内のすべてのモジュール(標準とフォーム/レポートのクラス)を外部のテキストファイルに一括出力・保存するプログラム例を紹介します。
コード例:
Sub VBExport()
Dim vbcmp As Object
Dim strFileName As String
Dim strExt As String
For Each vbcmp In VBE.ActiveVBProject.VBComponents
With vbcmp
'ファイル名までを設定
strFileName = "G:\modules\" & .Name
'拡張子を設定
Select Case .Type
Case 1 '標準モジュールの場合
strExt = ".bas"
Case 2 'クラスモジュールの場合
strExt = ".cls"
Case 100 'フォーム/レポートのモジュールの場合
strExt = ".cls"
End Select
'モジュールをエクスポート
.Export strFileName & strExt
End With
Next vbcmp
End Sub
「VBComponents」のコレクションは、「VBE.ActiveVBProject」、すなわち現在VBE上でアクティブになっているVBAのプロジェクトに含まれているすべてのモジュールに関する情報を持っています。Accessの場合、標準モジュール、クラスモジュール、あるいはフォーム/レポートのクラスモジュールなどに関する情報です。
このコレクションからひとつずつオブジェクトを取り出すことで、ここのモジュールの情報を取得することができます。
「Name」プロパティでそのモジュール名、「Type」プロパティでモジュールの種類を調べることができます。
上記のサンプルコードでは、ひとつずつVBComponentオブジェクトを取り出し、「Name」を使ってエクスポート先のファイル名を設定、さらに「Type」に応じてエクスポートするファイルの拡張子を設定、最後に「Export」メソッドによってオブジェクトつまりモジュール内のプログラムのコードをエクスポートしています。
実行例:
|