【AccessVBA】AccessVBAのモジュールをすべてエクスポートするには

この記事では、AccessVBAのモジュールをすべてエクスポートする方法についてご説明します。

【動画】AccessVBAのモジュールをすべてエクスポートする実際の動き

本題に入る前に、まずは次の動画をご覧ください。


VBProjectのVBComponentsコレクションに対してFor Eachのループを行うことでプロジェクトに含まれるすべてのコンポーネントを取得することができます。

コンポーネントを取得したら、どの種類のコンポーネントなのかを判定し、エクスポートするファイル名に「bas」または「.cls」のどちらかの拡張子を結合させます。

エクスポートするファイル名が決まったので、Exportメソッドにエクスポートするファイル名を指定して実行するとAccessVBAのモジュールがエクスポートされます。

このエクスポート処理は、存在するモジュールすべてに対して行われます。

コード作成の流れ

STEP.1
VBProjectのVBComponentsコレクションからプロジェクトに含まれるすべてのコンポーネントを取得する
VBProjectのVBComponentsコレクションからプロジェクトに含まれるすべてのコンポーネントを取得します。
STEP.2
取得したコンポーネントをエクスポートするファイル名を取得する
取得したコンポーネントをエクスポートするファイル名を取得します。
STEP.3
STEP.2で取得したファイル名をExportの引数に指定して実行する
STEP.2で取得したファイル名をExportの引数に指定して実行します。
実行後は、エクスポートされたファイルが生成されます。

Accessのデータベースファイルの例

今回は次のAccessのデータベースファイルを用意しました。

AccessのデータベースファイルのVBEを開くと、いくつかモジュールが存在しています。

  1. フォームモジュール:3つ
  2. レポートモジュール:1つ
  3. 標準モジュール:1つ
  4. クラスモジュール: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週間の無料体験があるので、これで「プログラミングの基礎」を学ぶのにおすすめですよ。

→ TechAcademyの「1週間 無料体験」はこちら