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