40 | モジュールからプロシージャの宣言行をリストアップする | ||
1つのモジュールのコードを「CodeModule」オブジェクトとして取り出し、「Lines」プロパティで各行のコードを取り出すループにおいて、取り出した1行内を文字列処理で検索することによって、特定の文字列を持っている行だけをリストアップすることができます。その特定の文字列を”プロシージャの宣言行”にあるキーワードとすることで、プロシージャの宣言行をリストアップすることができます。 下記プログラムでは、そのキーワードを『Sub』、『Function』、『Private Sub』、『Private Function』、『Public Sub』、『Public Function』の6つとし(クラスモジュールも含めるとこの限りではありません)、そのいずれかでコードが始まっている行をプロシージャの宣言行と判定しています。 それらはIf〜ElseIf文で分岐してもかまいませんが、ここでキーワードをあらかじめ配列に代入しておき、配列内のループによって6つの判定を行っています。 プログラム
Sub SampleCode_40() 'モジュールからプロシージャの宣言行をリストアップする Dim vbcmp As Object Dim intRow As Integer Dim strCode As String Dim avarSearch As Variant Dim iintLoop As Integer 'プロシージャの宣言行と判定する先頭文字列の配列を設定 avarSearch = Array("Sub", "Function", "Private Sub", "Private Function", _ "Public Sub", "Public Function") 'VBEのすべてのモジュールのループ For Each vbcmp In VBE.ActiveVBProject.VBComponents With vbcmp '1モジュール内のすべてのコードを取り出すループ For intRow = 1 To .CodeModule.CountOfLines strCode = .CodeModule.Lines(intRow, 1) '1行のコード内からプロシージャの宣言行かどうか判定するループ(配列を1つずつチェック) For iintLoop = 0 To UBound(avarSearch) If LTrim(strCode) Like avarSearch(iintLoop) & "*" Then 'コードが所定の先頭文字列で始まっていたらイミディエイトウィンドウに出力 Debug.Print .Name & "(" & intRow & "): " & strCode 'それ以上は配列の確認はせずに次の行へ Exit For End If Next iintLoop Next intRow End With Next vbcmp End Sub 実行例
■実行後 |
|||
|
Copyright © T'sWare All rights reserved |