Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 获取数据库的VBProject_Vba_Ms Access_Vbe - Fatal编程技术网

Vba 获取数据库的VBProject

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

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

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文件有另一个项目引用时,才会断开。