38 モジュールからコメントのある行をリストアップする

モジュール内のプログラムのコードをVBAから参照することができます。コードを1行ずつ取り出しながら、コメントの条件である「'(シングルクォーテーション)」をキーワードとして行内検索していくことで、コメントのある行をリストアップすることができます。

プログラムのポイントは次の通りです。
  • VBE.ActiveVBProject.VBComponentsコレクション
    VBEのプロジェクトエクスプローラーに表示されているすべてのモジュール(フォーム/レポート/標準)のコレクションです。

  • VBComponentオブジェクト
    VBComponentsコレクションからループで取り出すことで、1つ1つのモジュールをVBComponentオブジェクトとして参照することができます。

  • CodeModuleオブジェクト
    1つのモジュールの”コード”の全体を表すオブジェクトです。

  • CountOfLinesプロパティ
    CodeModuleオブジェクトのプロパティで、そのモジュールのコードの総行数を表します。

  • Linesプロパティ
    CodeModuleオブジェクトのプロパティで、引数として”最初の行番号”と”行数”を指定することで、その部分のコードだけを取り出すことができます。”行数”を常に「1」にして、”最初の行番号”を「1」からCountOfLinesプロパティの値までループ処理することで、すべての行のコードを1行ずつ取り出すことができます。
    ※下記プログラムでは取り出した1行分を変数strCodeに代入し、そこに「'」が含まれていたらコメント行としています。
プログラム

Sub SampleCode_38()
'モジュールからコメントのある行をリストアップする

  Dim vbcmp As Object
  Dim intRow As Integer
  Dim strCode As String

  'VBEのすべてのモジュールのループ
  For Each vbcmp In VBE.ActiveVBProject.VBComponents
    With vbcmp
      '1モジュール内のすべてのコードを取り出すループ
      For intRow = 1 To .CodeModule.CountOfLines
        strCode = .CodeModule.Lines(intRow, 1)
        If Left(LTrim(strCode), 1) = "'" Or _
            InStr(strCode, "  '") > 0 Then
          '先頭文字が「'」あるいは「スペース2ケ+'」が含まれていたら
          'コメントとして扱い、イミディエイトウィンドウに出力
          Debug.Print .Name & "(" & intRow & "): " & strCode
        End If
      Next intRow
    End With
  Next vbcmp

End Sub

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



Copyright © T'sWare All rights reserved