Получить VBProject базы данных
Учитывая объект базы данных в MS Access VBA, как можно получить VBProject этой базы данных?
Function GetVBProject(ByVal db As Database) As VBProject
Set GetVBProject = ???
End Function
Единственный способ получить VBProjects в Access - это через Application.VBE.VBProjects.Item(???)
, Однако я не буду знать, в каком порядке находятся проекты и как называется. Я буду знать только, что это родительская база данных. Эквивалент в Excel будет просто
Function GetVBProject(ByVal wb As Workbook) As VBProject
Set GetVBProject = wb.VBProject
End Function
1 ответ
Посмотри в 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
будет правильным тестовым условием для каждой ситуации. Но я надеюсь, что этот ответ даст вам что-то полезное.
Я смотрел в objVBProject.FileName
против CurrentDb.Name
когда БД открывается из буквы диска и из UNC-пути к сетевому ресурсу. В любом случае, кажется objVBProject.FileName
а также CurrentDb.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
Возможно, ответить на этот вопрос уже поздно, но если вы хотите заняться текущим проектом, тогда
Set vbProj = VBE.ActiveVBProject
будет работать.