Vba 获取数据库的VBProject
给定MS Access VBA中的数据库对象,如何获取该数据库的VBA项目Vba 获取数据库的VBProject,vba,ms-access,vbe,Vba,Ms Access,Vbe,给定MS Access VBA中的数据库对象,如何获取该数据库的VBA项目 Function GetVBProject(ByVal db As Database) As VBProject Set GetVBProject = ??? End Function 我知道如何在Access中获取VBProjects的唯一方法是通过Application.VBE.VBProjects.Item(?)。然而,我不知道项目的顺序和名称。我只知道它是父数据库。Excel中的等价物是 Functio
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
属性。如果项目的文件名
是当前数据库文件(CurrentDb.Name
),则该文件就是您想要的
公共函数ThisProject()作为字符串
Dim objVBProject作为对象
变暗strReturn为字符串
对于Application.VBE.VBProjects中的每个objVBProject
如果objVBProject.FileName=CurrentDb.Name,则
strReturn=objVBProject.Name
退出
如果结束
下一个
此项目=strReturn
端函数
该函数返回项目名称。您可以使用该名称设置对VBProject
对象的引用。或者,您可以修改函数以返回VBProject
,而不是字符串
我几乎没有对此进行过测试,所以我不确定objVBProject.FileName=CurrentDb.Name
是否适合于任何情况。但我希望这个答案能给你一些有用的东西
当从驱动器号和UNC路径到网络共享打开数据库时,我查看了objVBProject.FileName
与CurrentDb.Name
的对比。无论哪种方式,它似乎都是“自我调整”的,并且仍然相互匹配:
从驱动器号打开的数据库。。。
? CurrentDb.Name
C:\share\Access\BigDb\u secure.mdb
? application.VBE.VBProjects(“BigDb_secure”).FileName
C:\share\Access\BigDb\u secure.mdb
'数据库已从UNC路径打开到网络共享。。。
? CurrentDb.Name
\\HP64\share\Access\BigDb\u secure.mdb
? application.VBE.VBProjects(“BigDb_secure”).FileName
\\HP64\share\Access\BigDb\u secure.mdb
回答这个问题可能有点晚,但如果是您想要解决的当前项目,那么
Set vbProj = VBE.ActiveVBProject
将工作。使用文件名。聪明++如果访问文件位于相对路径上,则不正确
CurrentDb.Name
将使用映射驱动器的驱动器号,但VBProject.FileName
将返回网络路径。@cheezsteak不确定相对路径是什么意思。你说的是与我添加到答案中的测试用例不同的东西吗?我相信这是来自映射到驱动器X的samba驱动器。CurrentDB.Name=X:\VBEXsrc.accdb
Application.VBE.VBProjects(“VBEXsrc”)。Filename=\\TASC1\Users\philipw\VBEXsrc.accdb
很有趣,谢谢。我没想到桑巴舞的表现会有所不同。在这种情况下,我想您可以检查Dir(…FileName)
是否与Dir(CurrentDB.Name)
匹配,只有当您对名称与当前db的名称匹配的db文件有另一个项目引用时,才会断开。