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


该函数返回项目名称。您可以使用该名称设置对VBProject对象的引用。或者,您可以修改函数以返回VBProject而不是字符串。

我几乎没有对此进行测试,因此我不确定objVBProject.FileName = CurrentDb.Name将是每种情况的正确测试条件。但我希望这个答案能给您一些有益的基础。

从驱动器号和网络共享的UNC路径打开数据库时,我调查了objVBProject.FileNameCurrentDb.Name。无论哪种方式,似乎objVBProject.FileNameCurrentDb.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

关于vba - 获取数据库的VBProject,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30874019/

10-17 02:29