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