【VBA】VBAマクロの指定モジュールのプロシージャ一覧のDictionaryを取得する

準備

[ファイル]→[オプション]→[セキュリティーセンター]→[セキュリティーセンターの設定]→
[VBA プロジェクト オブジェクト モデルへのアクセスを信頼する]にチェック

サンプルプログラム

Sub sample()

    Dim wk As Workbook
    Dim dicFunction As Object
    
    'Excelファイルを開く ※「リンクの更新」はしないで開く
    Set wk = Workbooks.Open(Filename:="C:\Users\user\Desktop\temp\sampleVBA.xlsm", _
                            UpdateLinks:=0)
    
    'プロシージャ一覧のDictionaryを取得
    Set dicFunction = getFunction(wk.VBProject.VBComponents)
    
    'Excelファイルを保存せずに閉じる
    wk.Close SaveChanges:=False
    '後片付け
    Set wk = Nothing

End Sub

'プロシージャ一覧のDictionaryを取得
Private Function getFunction(VBComponents As Object) As Object
    
    Dim rowCount As Double
    Dim i As Integer
    Dim functionName As String
    Dim dicFunction As Object
    
    Set dicFunction = CreateObject("Scripting.Dictionary")
    
    '指定モジュールの総行数を取得
    rowCount = VBComponents("Module1").CodeModule.CountOfLines
    
    For i = 1 To rowCount
        
        functionName = VBComponents("Module1").CodeModule.ProcOfLine(i, 0)
        
        If functionName <> "" And Not dicFunction.Exists(functionName) Then
            dicFunction.Add functionName, ""
        End If
    
    Next
    
    Set getFunction = dicFunction
    '後片付け
    Set dicFunction = Nothing

End Function

タイトルとURLをコピーしました