モジュール内のプログラムのコードをVBAから参照することができます。コードを1行ずつ取り出しながら、コメントの条件である「'(シングルクォーテーション)」をキーワードとして行内検索していくことで、コメントのある行をリストアップすることができます。
プログラムのポイントは次の通りです。
- VBE.ActiveVBProject.VBComponentsコレクション
VBEのプロジェクトエクスプローラーに表示されているすべてのモジュール(フォーム/レポート/標準)のコレクションです。
- VBComponentオブジェクト
VBComponentsコレクションからループで取り出すことで、1つ1つのモジュールをVBComponentオブジェクトとして参照することができます。
- CodeModuleオブジェクト
1つのモジュールの”コード”の全体を表すオブジェクトです。
- CountOfLinesプロパティ
CodeModuleオブジェクトのプロパティで、そのモジュールのコードの総行数を表します。
- Linesプロパティ
CodeModuleオブジェクトのプロパティで、引数として”最初の行番号”と”行数”を指定することで、その部分のコードだけを取り出すことができます。”行数”を常に「1」にして、”最初の行番号”を「1」からCountOfLinesプロパティの値までループ処理することで、すべての行のコードを1行ずつ取り出すことができます。
プログラム
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
実行例
■実行後
|