概要
Accessはバージョン管理しにくいこともあり、下記のような くそコード デッドコードが大量にフォームや標準モジュールに残っていることがあります。
デッドコードの例
Function データ変換_20241001bk()
'何十行にもおよぶコードがあるけどこの関数は使われてない…。
End Function
Function データ変換_サンプル用()
'何十行にもおよぶコードがあるけどこの関数は使われてない…。
End Function
これを一つ一つ『削除してOK?』と確認することがあります…。
その際 オブジェクト内の関数一覧 が取得できると、
- 使用範囲確認のためのGrep検索
- 削除前と削除後の差分チェック
などがかなりはかどります。
サンプルコード
参照設定で『Microsoft Visual Basic for Applications Extensibility 5.3』を追加します。
『unko_god_module』という名前のオブジェクト内の関数一覧取得
'フォームに『コマンド0』という名前のボタンがあって、それをクリックした時というサンプル。
Private Sub コマンド0_Click()
Dim vb_components_ As VBComponents
Set vb_components_ = Application.VBE.ActiveVBProject.VBComponents
Dim code_module_ As CodeModule
Set code_module_ = vb_components_("unko_god_module").CodeModule
Dim i_ As Long
For i_ = 1 To code_module_.CountOfLines
Dim buf_ As String
If buf_ <> code_module_.ProcOfLine(i_, 0) Then
buf_ = code_module_.ProcOfLine(i_, 0)
Debug.Print buf_
End If
Next
End Sub
下記オブジェクトに対して関数一覧を取得できます。
- フォーム
- 標準モジュール
- クラス
- レポート
動作確認
例えばunko_god_moduleが下記なら…
unko_god_module
Option Compare Database
Option Explicit
Function アクセス修飾子無しfunction()
End Function
Sub アクセス修飾子無しsub()
End Sub
Private Function アクセス修飾子ありfunction()
End Function
Private Sub アクセス修飾子ありsub()
End Sub
Private Function アクセス修飾子あり引数ありfunction(ByVal tes As String)
End Function
Private Sub アクセス修飾子あり引数ありsub(ByVal tes As String)
End Sub
Private _
Function _
アクセス修飾子あり引数あり変な改行ありfunction( _
ByVal tes As _
String)
End Function
Private _
Sub _
アクセス修飾子あり引数あり変な改行ありsub( _
ByVal tes As _
String)
End Sub
Private _
Function _
アクセス修飾子あり引数あり変な改行あり先頭に変なスペースありfunction( _
ByVal tes As _
String)
End Function
Private _
Sub _
アクセス修飾子あり引数あり変な改行あり変なスペースありsub( _
ByVal tes As _
String)
End Sub
Private Function アクセス修飾子あり引数あり変な1行混入function(ByVal tes As String): Dim tes2 As String
End Function
Private Sub アクセス修飾子あり引数あり変な1行混入sub(ByVal tes As String): Dim tes2 As String
End Sub
参考サイトさん
バージョン
Microsoft Windows [Version 10.0.22631.4317]
Microsoft Access for Microsoft 365 MSO (バージョン 2409 ビルド 16.0.18025.20030) 32 ビット