■ 最新の投稿

モジュールに含まれるプロシジャの一覧を作成する

モジュールの総行数を調べるCountOfLinesとのProcOfLineプロパティを用いて、モジュール内に存在しているプロシジャの一覧を取得することができます。

① Visual Baisc プロジェクトへのアクセスを許可します。

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

このサンプルコードを実行すると、以下のメッセージボックスが表示されます。


Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です