获取数据库的VBProject

che*_*eak 7 ms-access vba access-vba vbe

给定MS Access VBA中的数据库对象,如何获取该数据库的VBProject?

Function GetVBProject(ByVal db As Database) As VBProject
    Set GetVBProject = ???
End Function
Run Code Online (Sandbox Code Playgroud)

我知道如何在Access中获取VBProjects的唯一方法就是通过Application.VBE.VBProjects.Item(???).但是,我不知道项目的顺序是什么,名称是什么.我只会知道它的父数据库.Excel中的等价物很简单

Function GetVBProject(ByVal wb As Workbook) As VBProject
    Set GetVBProject = wb.VBProject
End Function
Run Code Online (Sandbox Code Playgroud)

Han*_*sUp 6

查看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
Run Code Online (Sandbox Code Playgroud)

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

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

我看着objVBProject.FileNameCurrentDb.NameDB时,从一个驱动器号和UNC路径到网络共享打开.无论哪种方式,似乎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
Run Code Online (Sandbox Code Playgroud)