Anzeige
Archiv - Navigation
804to808
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
804to808
804to808
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

DB-Objekt aus Excel-AddIn-Funktion zurückgeben

DB-Objekt aus Excel-AddIn-Funktion zurückgeben
27.09.2006 16:26:09
DerChris
Hallo zusammen!
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

		

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: DB-Objekt aus Excel-AddIn-Funktion zurückgeben
27.09.2006 18:37:18
Luschi
Hallo Chris,
wenn ich aus 1 normalen Workbook heraus eine Funktion (mit Parameter) in einem AddIn aufrufe, welches dann 1 Objekt zurück gibt, dann benutze ich folgenden Code:
set myDB = Application.Run("myAddIn.xla!holeDB" , strDBName)
So wird es auch in der Excel-Hilfe beschrieben. In der Hilfe steht aber auch dieser Hinweis:
Die Run-Methode gibt den Rückgabewert des aufgerufenen Makros zurück. Objekte, die als Argumente an das Makro weitergeleitet werden, werden in Werte konvertiert (durch Zuweisung der Value-Eigenschaft an das Objekt). Das heißt, es ist mit der Run-Methode nicht möglich, Objekte an Makros weiterzuleiten.
Trotzdem gelingt es mir in Excel 2000/XP/2003, Tabellen und Zellen als Objekt an das AddIn zu übergeben und vom AddIn als Objekt wieder zurück zu bekommen. Wie das nun mit Datenbank-Objekten ist, habe ich noch nie getestet.
Gruß von Luschi
aus klein-Paris
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige