モジュールの総行数を調べるCountOfLinesとのProcOfLineプロパティを用いて、モジュール内に存在しているプロシジャの一覧を取得することができます。
① Visual Baisc プロジェクトへのアクセスを許可します。
② 「Microsoft Visual Basic for Application Extensibility」を参照設定します。
③ 下記サンプルコードをModule1に記載して下さい。Module1中に存在するプロシジャの一覧を作成する例です。
Public Sub Sample_MakeProcList_01()
' ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
' 参照設定:
' 「Microsoft Visual Basic for Application Extensibility」
' ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Dim lp As Long ' 単純なループカウンタ
' このブックのVBProjectをオブジェクト変数に格納する。
Dim Obj As VBIDE.VBProject
Set Obj = ThisWorkbook.VBProject
' CountOfLinesプロパティを用いてモジュールの総行数を調べる。
Dim rowCnt As Long
rowCnt = Obj.VBComponents("Module1") _
.CodeModule.CountOfLines
' "Module1"のコードの中を1行目から順次参照する。
Dim cnt As Long
cnt = 0
Dim ProcHS As Object
Set ProcHS = CreateObject("Scripting.Dictionary")
For lp = 1 To rowCnt
' lp 行目のプロシジャ名を取得する。
Dim procName As String
procName = Obj.VBComponents("Module1") _
.CodeModule.ProcOfLine(lp, 0)
' 初めて取得するプロシジャ名を連想配列に格納する。
If procName <> "" _
And ProcHS.exists(procName) = False Then
cnt = cnt + 1
ProcHS.Add procName, cnt
End If
Next
' 存在していたプロシジャ名をメッセージボックスで表示する。
Dim ProcArr
ProcArr = ProcHS.Keys
For lp = LBound(ProcArr) To UBound(ProcArr)
MsgBox ProcArr(lp)
Next
' オブジェクトを破棄する。
Set Obj = Nothing
Set ProcHS = Nothing
End Sub
' *
' * Proc1 引数無し
' *
Private Sub Proc1()
MsgBox "I'm Private Sub Proc1"
End Sub
' *
' * Proc2 引数無し
' *
Private Sub Proc2()
MsgBox "I'm Private Sub Proc2"
End Sub
' *
' * Proc3 引数無し
' *
Private Sub Proc3()
MsgBox "I'm Private Sub Proc3"
End Sub
このサンプルコードを実行すると、以下のメッセージボックスが表示されます。
コメントを残す