【VBA のプロシージャ一覧取得】


'=================================================================================
'本マクロ実施前に以下を行うこと。
'  「開発」タブ ⇒ マクロのセキュリティ ⇒ マクロの設定 ⇒
'  「VBA プロジェクト オブジェクト モデルへのアクセスを信頼する」にチェックを入れる
'=================================================================================
Public Sub CreateProcedureList()
 
    Dim lModuleCnt As Long
    Dim lLineCnt As Long
    Dim lRowIdx As Long
 
    Dim sModuleName As String
    Dim sProcedureName As String
 
    If MsgBox( _
                "コンポーネントとプロシージャの一覧を作成してよければOKボタンをクリックしてください。", _
                vbOKCancel + vbDefaultButton2 _
            ) = vbCancel Then
        Exit Sub
    End If
 
    '先頭にワークシートを挿入
    ThisWorkbook.Worksheets.Add Before:=Worksheets(1)
 
    lRowIdx = 1
    'プロジェクト内のモジュールの数だけループを回す
    For lModuleCnt = 1 To ThisWorkbook.VBProject.VBComponents.Count
        With ThisWorkbook.VBProject.VBComponents(lModuleCnt)
            sModuleName = .Name
            'モジュールに含まれるコードの行数文だけループを回す
            For lLineCnt = 1 To .CodeModule.CountOfLines
                If sProcedureName <> .CodeModule.ProcOfLine(lLineCnt, 0) And _
                   .CodeModule.ProcOfLine(lLineCnt, 0) <> "" Then
                    sProcedureName = .CodeModule.ProcOfLine(lLineCnt, 0)
                    ThisWorkbook.Worksheets(1).Cells(lRowIdx, 1) = sModuleName    'コンポーネント名の書き出し
                    ThisWorkbook.Worksheets(1).Cells(lRowIdx, 2) = sProcedureName 'プロシージャ名の書き出し
                    lRowIdx = lRowIdx + 1                                    'プロシージャ名を書きだす行番号を設定
                End If
            Next lLineCnt
        End With
    Next lModuleCnt
 
    MsgBox ThisWorkbook.Worksheets(1).Name & "にコンポーネントとプロシージャの一覧を作成しました。"
 
End Sub
 
最終更新:2015年03月04日 21:53