DB-Objekt aus Excel-AddIn-Funktion zurückgeben
27.09.2006 16:26:09
DerChris
Im Rahmen eines Sicherheitskonzeptes in unser Firma ist es nötig, unsere Access Datenbanken zu schützen. Dies geschieht mittels Arbeitsgruppen Informationsdatei (kurz: .mdw).
Da wir jedoch (sehr) viele Excel-Workbooks haben, die auf die Datenbanken via VBA zugreifen, war meine Idee eine Excel-AddIn zu schreiben, welches die Authentifizierung vornimmt und eine DAO.Database-Objekt auf die geöffnete Datenbank zurückgibt.
Das Ganze funktioniert auch prima bis zu dem Zeitpunkt, an dem ich versuche die Referenz auf die geöffnete DB zurückzugeben. Nach dem Aufruf der entsprechenden Funktion des AddIns Instanziert diese eine DAO.DBEngine, setzt die SystemDB, fügt einen Workspace hinzu und öffnet in diesem eine Database-Objekt. Alle Objekte sind richtig instanziert und ich kann mir beim Debugen auch deren Attribute ansehen.
Sobald ich jedoch das DB-Objekt aus einer Funktion zurückgebe, ist der Rückgabewert Nothing.
Hier das ganze an einem kleines Beispiel:
Sub fuelleWksMitDaten()
Dim myDB AS DAO.Database
Dim strDBName AS String
strDBName = "Irgendein Pfad zu einer Access Datenbank"
set myDB = holeDB(strDBName)
debug.print objDB.name
myDB.close
set myDB = Nothing
End Sub
Function holeDB(byval strPfad AS String) AS DAO.Database
Dim objDBE AS DAO.DBEngine
Dim objWS AS DAO.Workspace
Dim objDB AS DAO.Database
<DBEngine, Workspace & Database initalisieren>
set holeDB = objDB
set objWS = Nothing
set objDBE = Nothing
End Function
Das Beispiel ist natürlich stark vereinfacht, zeigt aber den prinzipiellen Aufbau.
Sub fuelleWksMitDaten() steht in einem normalen Excel Workbook
Function holeDB(byval strPfad AS String) AS DAO.Database steht in dem Excel-AddIn
Wie oben bereits geschrieben, ist myDB nach der Zuweisung immer Nothing, obwohl objDB korrekt initilisierrt wurde. Dem entsprechend wird debug.print myDb.name immer einen Fehler verursachen. :(
Gibt es hierfür eine Erklärung? Hat jemand eine Idee? Oder sollte das prinzipiell funktionieren und ich stelle mich zu doof an? :p
(Fragen über Fragen ;) )
Im Voraus besten Dank und liebe Grüße
Chris