7

MS Access VBA でデータベース オブジェクトが与えられた場合、そのデータベースの VBProject を取得するにはどうすればよいですか?

Function GetVBProject(ByVal db As Database) As VBProject
    Set GetVBProject = ???
End Function

Access で VBProjects を取得する方法を知っている唯一の方法は、Application.VBE.VBProjects.Item(???). ただし、プロジェクトの順序と名前はわかりません。私はそれが親データベースであることだけを知っています。Excelで同等のものは単純です

Function GetVBProject(ByVal wb As Workbook) As VBProject
    Set GetVBProject = wb.VBProject
End Function
4

2 に答える 2

6

コレクションを見て、VBProjects各プロジェクトのFileNameプロパティを確認してください。プロジェクトFileNameが現在のデータベース ファイル ( CurrentDb.Name) である場合、それが目的のファイルです。

Public Function ThisProject() As String
    Dim objVBProject As Object
    Dim strReturn As String
    For Each objVBProject In Application.VBE.VBProjects
        If objVBProject.FileName = CurrentDb.Name Then
            strReturn = objVBProject.Name
            Exit For
        End If
    Next
    ThisProject = strReturn
End Function

その関数はプロジェクト名を返します。名前を使用して、VBProjectオブジェクトへの参照を設定できます。VBProjectまたは、文字列の代わりに を返すように関数を修正することもできます。

私はこれをほとんどテストしていないのでobjVBProject.FileName = CurrentDb.Name、すべての状況で正しいテスト条件になるかどうかはわかりません. しかし、この回答が何か役に立つものになることを願っています。

私は、データベースがドライブ文字から、およびネットワーク共有への UNC パスから開かれた場合とobjVBProject.FileName比較して調べました。CurrentDb.Nameいずれにせよ、両方とも「自己調整」しているように見えますがobjVBProject.FileNameCurrentDb.Nameそれでも互いに一致しています。

' db opened from a drive letter ...
? CurrentDb.Name
C:\share\Access\BigDb_secure.mdb
? application.VBE.VBProjects("BigDb_secure").FileName
C:\share\Access\BigDb_secure.mdb

' db opened from UNC path to network share ...
? CurrentDb.Name
\\HP64\share\Access\BigDb_secure.mdb
? application.VBE.VBProjects("BigDb_secure").FileName
\\HP64\share\Access\BigDb_secure.mdb
于 2015-06-16T17:39:10.713 に答える