Получить 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

будет работать.

Другие вопросы по тегам