制御 ModuleやClass・UserForm名を取得する

※より実装に近く表示させる為、コードの改行を避けています。スマホ等で閲覧される際は向きを変えてご覧ください。

※実装するバージョンによってはバージョンアップの仕様により動作しないコードもあります。実装には動作確認の上ご使用下さい。

Option Explicit


Sub GetComponentsName(ByRef ComponentsName() As String)
'***************************************************************
'ModuleやClass・UserForm名を取得する
'***************************************************************
'※自分も対象にされます。
'※対象はプロジェクト全体
'ObjTyp:対象コレクション

Dim ObjPath As String
ObjPath = ThisWorkbook.Path & "\"

Dim Obj As Object, ObjTyp As Integer
Dim i As Integer

ObjTyp = 1 '対象コレクション(Module)

Dim Extension(100) As String '拡張子(Select Caseの方がベター)
Extension(1) = ".bas"   '1  :Module
Extension(2) = ".cls"   '2  :ClassModule
Extension(3) = ".frm"   '3  :UserForm
Extension(100) = ".cls" '100:Workbook & Sheet

i = 0 '初期化

For Each Obj In ThisWorkbook.VBProject.VBComponents

    If Obj.Type = ObjTyp Then
        ReDim Preserve ComponentsName(i)
        ComponentsName(i) = Obj.Name & Extension(ObjTyp)
        i = i + 1
    End If

Next Obj

End Sub


Private Sub test()
Dim ComponentsName() As String
Dim str As String, i As Integer

Call GetComponentsName(ComponentsName)

For i = LBound(ComponentsName) To UBound(ComponentsName)
    str = str & i & vbTab & ComponentsName(i) & vbCr
Next i

MsgBox str

End Sub

 

2000年01月01日|[VBサンプルコード]:[制御]