46 モジュールの各行がどのプロシージャのものかを取得する

CodeModuleオブジェクトとして読み込んだモジュールのコードについては、「ProcOfLine」プロパティを利用することで個々の行がどのプロシージャに属しているかを取得することができます。

このプロパティを参照するには、1つめの引数に「行番号」、一般的なSub/Functionプロシージャであれば2つめの引数には固定で「0」を指定することで、そのプロシージャ名を文字列として取得できます。
  • ループで行番号を変えていった場合には、そのプロシージャの行数分だけ、同じ値が返されることになります。
  • Declarationsセクションについては長さゼロの文字列が返されます。
  • 「End Sub」などと次のプロシージャの間に空行がある場合、その行は次のプロシージャの行とみなされます。コードエディタ上のプロシージャの区切り線のイメージです。
プログラム

Sub SampleCode_46()
'モジュールの各行がどのプロシージャのものかを取得する

  Dim vbcmp As Object
  Dim intRow As Integer
  Dim strProcName As String

  'Module1のモジュールを開く
  Set vbcmp = VBE.ActiveVBProject.VBComponents("Module1")
  With vbcmp.CodeModule
    '1モジュール内のすべてのコードを取り出すループ
    For intRow = 1 To .CountOfLines
      '各行のプロシージャ名を取得
      strProcName = .ProcOfLine(intRow, 0)
      'イミディエイトウィンドウに出力
      Debug.Print intRow & ": " & strProcName
    Next intRow
  End With

End Sub

実行例
■実行前

■実行後
| Index | Prev | Next |



Copyright © T'sWare All rights reserved