Look w kolekcji VBProjects
i sprawdzić każdy projekt jest FileName
nieruchomości. Jeśli projekt FileName
jest bieżącym plikiem bazy danych (CurrentDb.Name
), jest to ten, który chcesz.
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
Funkcja ta zwraca nazwę projektu. Możesz użyć tej nazwy, aby ustawić odwołanie do obiektu VBProject
. Możesz też zmienić funkcję zwracania wartości VBProject
zamiast ciągu.
Ledwo to przetestowałem, więc nie jestem pewien, czy objVBProject.FileName = CurrentDb.Name
będzie właściwym warunkiem testu dla każdej sytuacji. Mam jednak nadzieję, że ta odpowiedź da ci coś, na czym warto się oprzeć.
Sprawdziłem objVBProject.FileName
vs. CurrentDb.Name
, gdy db jest otwarty z litery dysku i ze ścieżki UNC do udziału sieciowego. Tak czy inaczej, wydaje objVBProject.FileName
i CurrentDb.Name
zarówno „self-adjust” i nadal pasuje do siebie:
' 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
Korzystanie z pliku. Mądry. ++ – RubberDuck
Nie będzie poprawne, jeśli plik programu Access znajduje się na ścieżce względnej. 'CurrentDb.Name' użyje litery dysku dla zmapowanego dysku, ale' VBProject.FileName' zwróci ścieżkę sieciową. – cheezsteak
@cheezsteak Nie jesteś pewien, co rozumiesz przez względną ścieżkę. Czy mówisz o czymś innym niż przypadki testowe dodane do odpowiedzi? – HansUp