获取数据库的 VBProject

Get the VBProject of a Database

给定 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

查看 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

那个函数return是项目名称。您可以使用该名称来设置对 VBProject 对象的引用。或者您可以将函数修改为 return VBProject 而不是字符串。

我几乎没有测试过这个,所以我不确定 objVBProject.FileName = CurrentDb.Name 是否是每种情况下的正确测试条件。但我希望这个答案能给你一些有用的东西。

我查看了 objVBProject.FileNameCurrentDb.Name 从驱动器盘符和从 UNC 路径到网络共享打开数据库的情况。无论哪种方式,似乎 objVBProject.FileNameCurrentDb.Name 都 "self-adjust" 并且仍然相互匹配:

' 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

回答这个问题可能有点晚了,但如果这是您要解决的当前项目,那么

Set vbProj = VBE.ActiveVBProject

会起作用。