给定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
答案 0 :(得分:5)
查看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.FileName
和CurrentDb.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
答案 1 :(得分:0)
回答这个问题可能有点晚了,但是如果这是您要解决的当前项目,那么
Set vbProj = VBE.ActiveVBProject
将起作用。