NewBaseMacro(2025)
VBAのテンプレートブック
モジュール名とその中のプロシージャ名(Sub / Function)を一覧表示
- まず、下記ボックス内をコピーし、標準モジュールに貼り付ける。
- 次に、モジュール名を【WWW_forVBE】に変更する。
- 利用時は、使用する標準モジュールにプロシージャをコピーし、☆☆☆、★★★、●●● 等の記号を、【Ctrl】+【H】で、プロシージャー名に置き換えて、使用する。
Module : WWW_forVBE ‘作成コード 確認用
Option Explicit
'************************************************************
' モジュール名とその中のプロシージャ名(Sub / Function)を一覧表示
' 対象:標準モジュール(ClassやSheetは除外)
' 出力:新規シートに一覧表示
'- VBEへのアクセス許可が必要です(「開発」タブ → 「マクロのセキュリティ」 → 「VBAプロジェクト オブジェクトモデルへのアクセスを許可」)。
'- 標準モジュールのみ対象です。Sheet1 や ThisWorkbook、クラスモジュールは除外。
'- 出力は新規シート "Module一覧" に、モジュール名とプロシージャ名のペアで一覧表示されます。
'************************************************************
Sub ListModulesAndProcedures()
Dim vbComp As VBIDE.VBComponent
Dim codeMod As VBIDE.CodeModule
Dim lineNum As Long
Dim procName As String
Dim procType As vbext_ProcKind
Dim ws As Worksheet
Dim nextRow As Long
'参照設定不要で動作(VBEへのアクセス許可が必要)
If Application.VBE.ActiveVBProject.Protection = vbext_pp_locked Then
MsgBox "プロジェクトが保護されています。", vbExclamation
Exit Sub
End If
'出力用シート作成
Set ws = Worksheets.Add
ws.Name = "Module一覧"
ws.Range("A1:B1").Value = Array("モジュール名", "プロシージャ名")
nextRow = 2
'標準モジュールをループ
For Each vbComp In ThisWorkbook.VBProject.VBComponents
If vbComp.Type = vbext_ct_StdModule Then
Set codeMod = vbComp.CodeModule
lineNum = 1
Do While lineNum < codeMod.CountOfLines
procName = codeMod.ProcOfLine(lineNum, procType)
If procName <> "" Then
ws.Cells(nextRow, 1).Value = vbComp.Name
ws.Cells(nextRow, 2).Value = procName
nextRow = nextRow + 1
'次のプロシージャへ
lineNum = codeMod.ProcStartLine(procName, procType) + _
codeMod.ProcCountLines(procName, procType)
Else
lineNum = lineNum + 1
End If
Loop
End If
Next vbComp
MsgBox "一覧の作成が完了しました♪", vbInformation
End Sub



コメント