2015-06-16 29 views
5

MS Access VBA'da bir veritabanı nesnesi verildiğinde, bu veritabanının VBProject'sini nasıl elde edebiliriz?Bir Veritabanı VBProject'i edinin

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

Ben Access'te VBProjects almak için bildiğim tek yol Application.VBE.VBProjects.Item(???) geçer. Ancak, projelerin hangi sıralamasında olduğunu ve ismin ne olduğunu bilmiyorum. Sadece ana veritabanı olduğunu biliyorum. Excel'de eşdeğer VBProjects koleksiyonunda sade

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

cevap

4

Bak olmalı ve her projenin FileName özelliğini kontrol ederim. Bir projenin FileName güncel veritabanı dosyasıysa (CurrentDb.Name), istediğinizi budur.

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 

Bu işlev proje adını döndürür. VBProject nesnesine başvuru yapmak için adı kullanabilirsiniz. Ya da bir dize yerine VBProject döndürme işlevini gözden geçirebilirsiniz.

Bunu zorlukla test ettim, bu yüzden belirsiz olduğumdan, her durum için doğru test koşulu olacak objVBProject.FileName = CurrentDb.Name. Ama umarım bu cevap size üzerinde yararlı bir şeyler sunar.

db bir sürücü harfinden ve bir UNC yolundan bir ağ paylaşımına açıldığında objVBProject.FileName ve CurrentDb.Name'a baktım.

' 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

dosya adı kullanıldığında: Her iki şekilde de objVBProject.FileName ve CurrentDb.Name hem "kendiliğinden düzelir" ve hala birbirlerine maç gibi görünüyor. Akıllı. ++ – RubberDuck

+1

Erişim dosyası göreli bir yoldaysa doğru olmaz. 'CurrentDb.Name', eşlenen bir sürücü için sürücü harfini kullanacak, ancak 'VBProject.FileName', ağ yolunu döndürecektir. – cheezsteak

+0

@cheezsteak Göreli yoldan ne kastettiğinizden emin değil misiniz? Cevaplara eklediğim test örneklerinden farklı bir şeyden mi bahsediyorsunuz? – HansUp