获取数据库的VBProject

时间:2015-06-16 17:14:23

标签: vba ms-access access-vba vbe

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

2 个答案:

答案 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.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

答案 1 :(得分:0)

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

Set vbProj = VBE.ActiveVBProject

将起作用。