Guardate nella raccolta VBProjects
e verificare la proprietà di ogni progetto FileName
. Se il FileName
di un progetto è il file di database corrente (CurrentDb.Name
), quello è quello desiderato.
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
Tale funzione restituisce il nome del progetto. È possibile utilizzare il nome per impostare un riferimento all'oggetto VBProject
. In alternativa, è possibile modificare la funzione per restituire VBProject
anziché una stringa.
Ho appena testato questo, quindi sono incerto objVBProject.FileName = CurrentDb.Name
sarà la condizione di test corretta per ogni situazione. Ma spero che questa risposta ti dia qualcosa di utile su cui costruire.
Ho esaminato objVBProject.FileName
rispetto a CurrentDb.Name
quando il db viene aperto da una lettera di unità e da un percorso UNC a una condivisione di rete. In entrambi i casi, sembra objVBProject.FileName
e CurrentDb.Name
sia "auto-regolare" e abbinare ancora l'un l'altro:
' 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
Usando il nome del file. Inteligente. ++ – RubberDuck
Non sarà corretto se il file di Access si trova su un percorso relativo. 'CurrentDb.Name' userà la lettera di unità per un'unità mappata ma' VBProject.FileName' restituirà il percorso di rete. – cheezsteak
@cheezsteak Non sei sicuro di cosa intendessi per percorso relativo. Stai parlando di qualcosa di diverso dai casi di test che ho aggiunto alla risposta? – HansUp