Given a database object in MS Access VBA, how can one get that database's VBProject?
Function GetVBProject(ByVal db As Database) As VBProject
Set GetVBProject = ???
The only way I know how to get VBProjects in Access is through
Application.VBE.VBProjects.Item(???). However, I won't know what order of the projects are in and what the name is. I will only know it's parent database. The equivalent in Excel would be simply
Function GetVBProject(ByVal wb As Workbook) As VBProject
Set GetVBProject = wb.VBProject
Best How To :
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
ThisProject = strReturn
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
CurrentDb.Name when the db is opened from a drive letter and from a UNC path to a network share. Either way, it seems
CurrentDb.Name both "self-adjust" and still match each other:
' db opened from a drive letter ...
' db opened from UNC path to network share ...