■ VBAからVBEを操作しよう!2
前回に引き続き、VBAからVBEを操作する方法を解説します。
■CodeModuleオブジェクトを利用する
CodeModuleオブジェクトは、モジュール内に記述されているVBAコードを取得することができます。これにより、コードの総行数、指定行のコード文字列を取得・利用することが可能になります。
例:
Sub Test()
Dim MyCodeModule As Object
Dim i As Long
Set MyCodeModule = _
ThisWorkbook.VBProject.VBComponents("Module1").CodeModule
For i = 1 To MyCodeModule.CountOfLines
Cells(i, 1) = MyCodeModule.Lines(i, 1)
Next i
End Sub
この例では、プロシージャ"Test"が記述されているブックの"Module1"モジュールのすべてのコードを、アクティブシートのA列に書き出します。 |
・CountOfLinesプロパティは、モジュール内に記述されているコードの総行数を返します。このとき、総行数には宣言セクションの行数も含まれます。
※宣言セクション部分の行数のみを取得するには、CountOfDeclarationLinesプロパティを使用します。
・Linesプロパティは引数で指定した行位置から指定した行数分のコードを返します。
[書式]
オブジェクト.Lines(開始行, 行数)
オブジェクトにはCodeModuleオブジェクトを指定します。
開始行には取得する行位置を、行数には取得する行数を指定します。
例:
Sub Test()
Dim MyCodeModule As Object
Dim i As Long, r As Long
Set MyCodeModule = _
ThisWorkbook.VBProject.VBComponents("Module1").CodeModule
r = 1
For i = 1 To MyCodeModule.CountOfLines
If Cells(r, 1) <> MyCodeModule.ProcOfLine(i, 0) Then
r = r + 1
Cells(r, 1) = MyCodeModule.ProcOfLine(i, 0)
End If
Next i
End Sub
この例では、プロシージャ"Test"が記述されているブックの"Module1"モジュールのすべてのプロシージャ名を、アクティブシートのA列に書き出します。 |
・ProcOfLineプロパティは、指定した行を含むプロシージャの名前を返します。
[書式]
オブジェクト.ProcOfLine(指定行, 種類)
オブジェクトにはCodeModuleオブジェクトを指定します。
指定行にはプロシージャ名を取得する行位置を、種類には取得するプロシージャの種類を表す値を指定します。
値 |
内容 |
0 |
SubプロシージャまたはFunctionプロシージャ |
1 |
Property Letプロシージャ |
2 |
Property Setプロシージャ |
3 |
Property Getプロシージャ |
※この他のプロシージャの情報を返すプロパティには次のものがあります。
・ProcBodyLineプロパティは、指定したプロシージャの先頭行番号を返します。
[書式]
オブジェクト.ProcBodyLine(プロシージャ名, 種類)
オブジェクトにはCodeModuleオブジェクトを指定します。
プロシージャ名には先頭行を返すプロシージャ名を、種類には取得するプロシージャの種類を表す値を指定します。
・ProcCountLinesプロパティは、指定したプロシージャの行数を返します。
[書式]
オブジェクト.ProcCountLines(プロシージャ名, 種類)
オブジェクトにはCodeModuleオブジェクトを指定します。
プロシージャ名には行数を返すプロシージャ名を、種類には取得するプロシージャの種類を表す値を指定します。
※このとき返す行数は、指定したプロシージャ上部の[区分線]から下部の[区分線]までの行数です。
・ProcStartLineプロパティは、指定したプロシージャの開始行を返します。
[書式]
オブジェクト.ProcStartLine(プロシージャ名, 種類)
オブジェクトにはCodeModuleオブジェクトを指定します。
プロシージャ名には行数を返すプロシージャ名を、種類には取得するプロシージャの種類を表す値を指定します。
※このとき返す開始行は、指定したプロシージャ上部の[区分線]直下の行の行数です。
次回も引き続き、CodeModuleオブジェクトについて解説します。
|