41 Declarationsセクションの変数の宣言行をリストアップする

1つのモジュールのコードを「CodeModule」オブジェクトとして取り出し、「Lines」プロパティで各行のコードを取り出すループにおいて、上限をCountOfLinesプロパティではなく「CountOfDeclarationLines」プロパティの値とすることで、Declarationsセクションのコードだけを取り出すことができます(※注)。CountOfDeclarationLinesプロパティにはDeclarationsセクション内のコー ドの総行数が格納されています。

また、Linesプロパティで取り出した1行について、特定の文字列、ここでは変数の宣言を表す『Dim』、『Public』、『Private』のいずれかで始まっているかどうかを判定することで、変数の宣言行だけをリストアップすることができます。
  • CountOfLinesプロパティは”モジュール”の全行数、CountOfDeclarationLinesプロパティは”Declarations”の行数です。Linesプロパティでの行番号指定は同じです。同じ行番号を指定すれば同じコードが取り出されます。あくまでもループの上限が違うだけです。
プログラム

Sub SampleCode_41()
'Declarationsセクションの変数の宣言行をリストアップする

  Dim vbcmp As Object
  Dim intRow As Integer
  Dim strCode As String
  Dim avarSearch As Variant
  Dim iintLoop As Integer

  '変数の宣言行と判定する先頭文字列の配列を設定
  avarSearch = Array("Dim", "Public", "Private")

  'VBEのすべてのモジュールのループ
  For Each vbcmp In VBE.ActiveVBProject.VBComponents
    With vbcmp
      'Declarationsセクション内のすべてのコードを取り出すループ
      For intRow = 1 To .CodeModule.CountOfDeclarationLines
        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

実行例
■実行後
| Index | Prev | Next |



Copyright © T'sWare All rights reserved