1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AccessのVBAでオブジェクト内の関数一覧を取得

Last updated at Posted at 2024-10-14

概要

Accessはバージョン管理しにくいこともあり、下記のような くそコード デッドコードが大量にフォームや標準モジュールに残っていることがあります。

デッドコードの例
Function データ変換_20241001bk()
    '何十行にもおよぶコードがあるけどこの関数は使われてない…。
End Function

Function データ変換_サンプル用()
    '何十行にもおよぶコードがあるけどこの関数は使われてない…。
End Function

これを一つ一つ『削除してOK?』と確認することがあります…。

その際 オブジェクト内の関数一覧 が取得できると、

  • 使用範囲確認のためのGrep検索
  • 削除前と削除後の差分チェック

などがかなりはかどります。

サンプルコード

参照設定で『Microsoft Visual Basic for Applications Extensibility 5.3』を追加します。

image.png

『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

サンプルコードの実行結果は下記。
image.png

参考サイトさん

バージョン

Microsoft Windows [Version 10.0.22631.4317]
Microsoft Access for Microsoft 365 MSO (バージョン 2409 ビルド 16.0.18025.20030) 32 ビット

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?