2015-06-16 19 views
5

Biorąc pod uwagę obiekt bazy danych w MS Access VBA, jak można uzyskać VBProject tej bazy danych?Pobierz VBProject z bazy danych

Function GetVBProject(ByVal db As Database) As VBProject 
    Set GetVBProject = ??? 
End Function 

Jedynym sposobem wiem jak dostać VBProjects w programie Access jest przez Application.VBE.VBProjects.Item(???). Nie będę jednak wiedział, w jakiej kolejności są projekty i jak się nazywa. Wiem tylko, że to baza danych rodziców. Równowartość w Excelu byłoby po prostu

Function GetVBProject(ByVal wb As Workbook) As VBProject 
    Set GetVBProject = wb.VBProject 
End Function 

Odpowiedz

4

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 
+0

Korzystanie z pliku. Mądry. ++ – RubberDuck

+1

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

+0

@cheezsteak Nie jesteś pewien, co rozumiesz przez względną ścieżkę. Czy mówisz o czymś innym niż przypadki testowe dodane do odpowiedzi? – HansUp

Powiązane problemy