VBComponentの操作


VBComponentオブジェクトは、VBProjectに含まれる標準モジュールや、UserForm、Sheet1やThisWorkbookなどのドキュメントモジュールなどを表します。ここでは、アクティブブックに次のようなコンポーネントが含まれていたとします。

次のコードは、アクティブブックに含まれるコンポーネントの情報をセルに入力します。

Sub Sample3()
    Dim i As Long
    With ActiveWorkbook.VBProject
        For i = 1 To .VBComponents.Count
            Cells(i, 1) = .VBComponents(i).Name
            Cells(i, 2) = .VBComponents(i).Type
        Next i
    End With
End Sub

VBComponentオブジェクトのTypeプロパティは、次のような値を返します。

内容
1 標準モジュール
2 クラス モジュール
3 Microsoft Form
11 ActiveX デザイナ
100 Document モジュール

次のコードは、アクティブブックに含まれている標準モジュールを調べます。

Sub Sample4()
    Dim i As Long, buf As String, mdlName As String
    With ActiveWorkbook.VBProject
        For i = 1 To .VBComponents.Count
            If .VBComponents(i).Type = 1 Then
                mdlName = mdlName & .VBComponents(i).Name & vbCrLf
            End If
        Next i
        If mdlName <> "" Then
            MsgBox "次の標準モジュールが含まれています" & vbCrLf & mdlName
        Else
            MsgBox "標準モジュールは含まれていません"
        End If
    End With
End Sub

VBComponentsコレクションのAddメソッドを使うと、VBProjectにコンポーネントを追加できます。このとき、Addメソッドの引数に次の数値を指定して、追加するコンポーネントの種類を特定できます。

内容
1 標準モジュール
2 クラス モジュール
3 Microsoft Form

次のコードは、アクティブブックに標準モジュールが含まれていない場合は、新しい標準モジュールを追加します。

Sub Sample5()
    Dim i As Long, flag As Boolean
    With ActiveWorkbook.VBProject
        For i = 1 To .VBComponents.Count
            If .VBComponents(i).Type = 1 Then
                flag = True
                Exit For
            End If
        Next i
        If Not flag Then .VBComponents.Add 1
    End With
End Sub

コンポーネントをファイルにエクスポートするときはVBComponentオブジェクトのExportメソッドを使います。また、外部のファイルをインポートするには、VBComponentsコレクションのImportメソッドを使います。

次のコードは、Book1のModule1を「C:\Work\Book1_Module.bas」という名前でエクスポートします。続いてBook2に、エクスポートした「C:\Work\Book1_Module.bas」をインポートします。Book1とBook2を開いた状態で実行してください。

Sub Sample6()
    Const Filename As String = "C:\Work\Book1_Module.bas"
    Workbooks("Book1.xls").VBProject.VBComponents("Module1").Export Filename
    Workbooks("Book2.xls").VBProject.VBComponents.Import Filename
End Sub