Get the VBProject of a Database

Look in the VBProjects collection and check each project's FileName property. If a project's FileName is the current database file (CurrentDb.Name), that is the one you want.

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

That function returns the project name. You could use the name to set a reference to the VBProject object. Or you could revise the function to return the VBProject instead of a string.

I barely tested this, so I'm uncertain objVBProject.FileName = CurrentDb.Name will be the correct test condition for every situation. But I hope this answer gives you something useful to build on.

I looked into objVBProject.FileName vs. CurrentDb.Name when the db is opened from a drive letter and from a UNC path to a network share. Either way, it seems objVBProject.FileName and CurrentDb.Name both "self-adjust" and still match each other:

' 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

It may be kind of late to answer this but if it is the current project you want to address then

Set vbProj = VBE.ActiveVBProject

will work.

Tags:

Ms Access

Vba

Vbe