この記事では、AccessVBAのモジュールをすべてエクスポートする方法についてご説明します。
【動画】AccessVBAのモジュールをすべてエクスポートする実際の動き
本題に入る前に、まずは次の動画をご覧ください。
VBProjectのVBComponentsコレクションに対してFor Eachのループを行うことでプロジェクトに含まれるすべてのコンポーネントを取得することができます。
コンポーネントを取得したら、どの種類のコンポーネントなのかを判定し、エクスポートするファイル名に「bas」または「.cls」のどちらかの拡張子を結合させます。
エクスポートするファイル名が決まったので、Exportメソッドにエクスポートするファイル名を指定して実行するとAccessVBAのモジュールがエクスポートされます。
このエクスポート処理は、存在するモジュールすべてに対して行われます。
コード作成の流れ
実行後は、エクスポートされたファイルが生成されます。
Accessのデータベースファイルの例
今回は次のAccessのデータベースファイルを用意しました。
AccessのデータベースファイルのVBEを開くと、いくつかモジュールが存在しています。
- フォームモジュール:3つ
- レポートモジュール:1つ
- 標準モジュール:1つ
- クラスモジュール:1つ
以上計6つのモジュールが存在しています。
コードを実行すると、各モジュールがエクスポートされ、6つのファイルが生成されます。
エクスポートされたファイルを確認すると、同じコードで生成されています。
コードの例
Option Compare Database Option Explicit Private Sub btn_exec_Click() Dim vbcmp As Object 'VBProjectのVBComponentsコレクション用変数 Dim strFileName As String 'エクスポートするファイル名 Dim strExt As String '拡張子の文字列格納用フォルダ 'AccessVBAに存在するモジュールの数分処理を繰り返すFor文 For Each vbcmp In VBE.ActiveVBProject.VBComponents With vbcmp 'エクスポートファイルの格納先のパス+ファイル名を変数strFileNameに格納する strFileName = Application.CurrentProject.Path & "\out\" & .name Select Case .Type Case 1 'モジュールの種類が標準モジュールの場合 '拡張子の文字列を取得 strExt = ".bas" Case 2, 100 'モジュールの種類がクラスモジュールの場合(2の場合) 'フォームまたはレポートのモジュールの場合(100の場合) '拡張子のモジュールを取得 strExt = ".cls" End Select 'モジュールをエクスポートする .Export strFileName & strExt End With Next vbcmp 'モジュールをエクスポートした先のフォルダを開く Call Shell("explorer.exe """ & Application.CurrentProject.Path & "\out""", vbNormalFocus) End Sub
注目すべきコード①
最初に見て頂きたいのは11行目です。
'AccessVBAに存在するモジュールの数分処理を繰り返すFor文 For Each vbcmp In VBE.ActiveVBProject.VBComponents
コードの説明
以上のコードは、AccessVBAに存在するモジュールの数分処理を繰り返すFor文です。
存在するモジュールのすべてをこのFor文で取得することができます。
取得されたモジュールの情報はvbcmpに格納されます。
このvbcmpからモジュール名(nameプロパティ)やモジュールの種類(Typeプロパティ)が取得でき、エクスポート(Exportメソッド)することもできます。
注目すべきコード②
次に見て頂きたいのは16行目です。
'エクスポートファイルの格納先のパス+ファイル名を変数strFileNameに格納する strFileName = Application.CurrentProject.Path & "\out\" & .name
コードの説明
以上のコードは、エクスポートするファイル名を取得するコードです。
モジュールをエクスポートする出力先のパスと、モジュール名を結合させて変数strFileNameに格納しています。
ただし、このコードではモジュール名を結合させただけで、拡張子はまだない状態です。
拡張子の結合は25行目や32行目などで行います。
注目すべきコード③
次に見て頂きたいのは18行目から35行目です。
Select Case .Type Case 1 'モジュールの種類が標準モジュールの場合 '拡張子の文字列を取得 strExt = ".bas" Case 2, 100 'モジュールの種類がクラスモジュールの場合(2の場合) 'フォームまたはレポートのモジュールの場合(100の場合) '拡張子のモジュールを取得 strExt = ".cls" End Select
コードの説明
以上のコードは、モジュールの種類を判定して、モジュールの種類に適した拡張子を取得する処理のコードです。
エクスポート時はモジュールごとに付けられる拡張子が異なるので、適した拡張子を以上のコードを取得します。
例えば標準モジュールをエクスポートするなら拡張子は「.bas」ですし、クラスモジュールなら「.cls」です。
コードの詳細
20行目のコードでは、モジュールの種類が標準モジュールかどうかを判定し、標準モジュールの場合は25行目で「.bas」の拡張子の文字列を取得します。
Typeプロパティが1の場合は標準モジュールに該当します。
27行目のコードでは、モジュールの種類がクラスモジュールかフォーム、もしくはレポートモジュールかどうかを判定し、クラスモジュールかフォーム、もしくはレポートモジュールの場合は32行目で「.cls」の拡張子の文字列を取得します。
Typeプロパティ2の場合はクラスモジュール、100の場合はフォームかレポートモジュールのどちらかに該当します。
注目すべきコード④
次に見て頂きたいのは18行目です。
'モジュールをエクスポートする .Export strFileName & strExt
コードの説明
以上のコードは、モジュールをエクスポートする処理のコードです。
Exportメソッドにエクスポートするファイル名を指定して実行するとAccessVBAのモジュールがエクスポートされます。
動作確認
「Accessのデータベースファイルの例」をご覧ください。
最後に
この記事では、AccessVBAのモジュールをすべてエクスポートする方法についてご説明しました。
AccessVBAのモジュールをすべてエクスポートしたいときは本記事を参考にしてみてくださいね。
プログラミングのスキルを習得するなら
プログラミングのスキルを習得したい、今のスキルをもっと高めたい、そう考えているなら「プログラミングスクール」がおすすめです。
プログラミングのスキルの基礎を身につけるなら「TechAcademy」で1週間の無料体験があるので、これで「プログラミングの基礎」を学ぶのにおすすめですよ。