VBAの各モジュールの数と行数を調べる方法
モジュール数と行数を把握したい
過去に書き溜めたVBAのコード(Accessメイン)を
備忘録代わりにちょっとずつ書いていきます。
今回は、モジュール数と行数を把握したい場合について。
下記のコードを実行すれば、楽に把握できます。
(Excel、Access両方対応)
事前準備(Excel2010)
Excelの場合、下記設定が必須(未設定の場合、エラーが発生する)
ファイル>オプション>セキュリティセンター>セキュリティセンターの設定>マクロの設定
- 「すべてのマクロを有効にする」にチェック
- 「VBAプロジェクトオブジェクトモデルへのアクセスを信頼する」にチェック
事前準備(Access2010)
Excelと違い、「VBAプロジェクトオブジェクトモデルへのアクセスを信頼する」は無いが、
念のため「マクロの設定」が有効か確認
ファイル>オプション>セキュリティセンター>セキュリティセンターの設定>マクロの設定
- 「すべてのマクロを有効にする」にチェック
以下、コード(共通化してもよいのですが分けてます)
Excel版のコード
Sub CountAllCodeLine()
'//コード総行数の取得
'//Excel版
Dim moduCount As Long
Dim i As Integer
Dim AllLine As Long
Dim k As Long
Dim strTemp As String
Dim lnPropertyProc As Long
Dim lnSubProc As Long
Dim lnFunctionProc As Long
Dim strType As String
With Excel.Application.VBE.ActiveVBProject
'With Access.Application.VBE.ActiveVBProject
moduCount = .VBComponents.Count
For i = 1 To moduCount
AllLine = AllLine + CLng(.VBComponents(i).CodeModule.CountOfLines)
With .VBComponents(i).CodeModule
For k = 1 To .CountOfLines
strTemp = .Lines(k, 1)
If strTemp Like "*End Sub*" Then
lnSubProc = lnSubProc + 1
ElseIf strTemp Like "*End Function*" Then
lnFunctionProc = lnFunctionProc + 1
ElseIf strTemp Like "*End Property*" Then
lnPropertyProc = lnPropertyProc + 1
End If
Next k
End With
Select Case .VBComponents(i).Type
Case 1: strType = "標準モジュール"
Case 2: strType = "クラスモジュール"
Case 3: strType = "フォーム"
Case 100: strType = "シートorブック"
Case Else: strType = Str(.VBComponents(i).Type)
End Select
Debug.Print strType & "…" & .VBComponents(i).Name & ":" & .VBComponents(i).CodeModule.CountOfLines & "行"
Next i
lnSubProc = lnSubProc - 1
lnFunctionProc = lnFunctionProc - 1
lnPropertyProc = lnPropertyProc - 1
Debug.Print "総行数 : " & AllLine & " 行" & vbCrLf & _
"総モジュール数 : " & moduCount & " 個" & vbCrLf & _
"サブプロシージャ数 : " & lnSubProc & " 個" & vbCrLf & _
"ファンクションプロシージャ数 : " & lnFunctionProc & " 個" & vbCrLf & _
"プロパティプロシージャ数 : " & lnPropertyProc & " 個" & vbCrLf & _
"平均コード行数 : " & AllLine / (lnSubProc + lnFunctionProc + lnPropertyProc) & " 行"
End With
End Sub
Excel版の結果
Sub CountAllCodeLine()
'//コード総行数の取得
'//Excel版
Dim moduCount As Long
Dim i As Integer
Dim AllLine As Long
Dim k As Long
Dim strTemp As String
Dim lnPropertyProc As Long
Dim lnSubProc As Long
Dim lnFunctionProc As Long
Dim strType As String
With Excel.Application.VBE.ActiveVBProject
'With Access.Application.VBE.ActiveVBProject
moduCount = .VBComponents.Count
For i = 1 To moduCount
AllLine = AllLine + CLng(.VBComponents(i).CodeModule.CountOfLines)
With .VBComponents(i).CodeModule
For k = 1 To .CountOfLines
strTemp = .Lines(k, 1)
If strTemp Like "*End Sub*" Then
lnSubProc = lnSubProc + 1
ElseIf strTemp Like "*End Function*" Then
lnFunctionProc = lnFunctionProc + 1
ElseIf strTemp Like "*End Property*" Then
lnPropertyProc = lnPropertyProc + 1
End If
Next k
End With
Select Case .VBComponents(i).Type
Case 1: strType = "標準モジュール"
Case 2: strType = "クラスモジュール"
Case 3: strType = "フォーム"
Case 100: strType = "シートorブック"
Case Else: strType = Str(.VBComponents(i).Type)
End Select
Debug.Print strType & "…" & .VBComponents(i).Name & ":" & .VBComponents(i).CodeModule.CountOfLines & "行"
Next i
lnSubProc = lnSubProc - 1
lnFunctionProc = lnFunctionProc - 1
lnPropertyProc = lnPropertyProc - 1
Debug.Print "総行数 : " & AllLine & " 行" & vbCrLf & _
"総モジュール数 : " & moduCount & " 個" & vbCrLf & _
"サブプロシージャ数 : " & lnSubProc & " 個" & vbCrLf & _
"ファンクションプロシージャ数 : " & lnFunctionProc & " 個" & vbCrLf & _
"プロパティプロシージャ数 : " & lnPropertyProc & " 個" & vbCrLf & _
"平均コード行数 : " & AllLine / (lnSubProc + lnFunctionProc + lnPropertyProc) & " 行"
End With
End Sub
Access版のコード
Sub CountAllCodeLine()
'//モジュール数とコード総行数の取得
'//Access版
Dim moduCount As Long
Dim i As Integer
Dim AllLine As Long
Dim k As Long
Dim strTemp As String
Dim lnPropertyProc As Long
Dim lnSubProc As Long
Dim lnFunctionProc As Long
Dim strType As String
With Access.Application.VBE.ActiveVBProject
moduCount = .VBComponents.Count
For i = 1 To moduCount
AllLine = AllLine + CLng(.VBComponents(i).CodeModule.CountOfLines)
With .VBComponents(i).CodeModule
For k = 1 To .CountOfLines
strTemp = .Lines(k, 1)
If strTemp Like "*End Sub*" Then
lnSubProc = lnSubProc + 1
ElseIf strTemp Like "*End Function*" Then
lnFunctionProc = lnFunctionProc + 1
ElseIf strTemp Like "*End Property*" Then
lnPropertyProc = lnPropertyProc + 1
End If
Next k
End With
Select Case .VBComponents(i).Type
Case 1: strType = "標準モジュール"
Case 2: strType = "クラスモジュール"
Case Else: strType = Str(.VBComponents(i).Type)
End Select
Debug.Print strType & "…" & .VBComponents(i).Name & ":" & .VBComponents(i).CodeModule.CountOfLines & "行"
Next i
lnSubProc = lnSubProc - 1
lnFunctionProc = lnFunctionProc - 1
lnPropertyProc = lnPropertyProc - 1
Debug.Print "総行数 : " & AllLine & " 行" & vbCrLf & _
"総モジュール数 : " & moduCount & " 個" & vbCrLf & _
"サブプロシージャ数 : " & lnSubProc & " 個" & vbCrLf & _
"ファンクションプロシージャ数 : " & lnFunctionProc & " 個" & vbCrLf & _
"プロパティプロシージャ数 : " & lnPropertyProc & " 個" & vbCrLf & _
"平均コード行数 : " & AllLine / (lnSubProc + lnFunctionProc + lnPropertyProc) & " 行"
End With
End Sub
Access版の結果
動作確認済み環境
- Excel
- 2007,2010
- Access
- 2003,2007,2010,2013
- 2007,2010
- 2003,2007,2010,2013
Author And Source
この問題について(VBAの各モジュールの数と行数を調べる方法), 我々は、より多くの情報をここで見つけました https://qiita.com/kusanoiskuzuno/items/d54f87950f0ff053e645著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .