Supportnet Computer
Planet of Tech

Supportnet / Forum / Datenbanken

access kapiert meinen realtiven pfad nicht





Frage

ich möchte ein makro in einer funktion innerhalb von access aufrufen. die db befindet sich unter c:\test\db.mdb. das makro unter c:\test\pdss\Macros\Hotel.xls access kann aber das makro nicht finden obwohl es definitiv da ist. deklariert hab ich eine zu füllende variable (lokal) wie unten. wer ist zu blöd, access oder ich? ;o)) deklaration: Dim pfadExcel1 As String pfadExcel1 = "pdss\Macros\Hotel.xls" aufruf: ExcelObj.Workbooks.Open (pfadExcel1)

Antwort 1 von PotzBlitz

Hallo melllanie,

der Open-Methode solltet du immer einen absoluten Pfad übergeben. Sie nimmt zwar auch reine Dateinamen an, aber die Datei wird dann im "aktuellen Pfad" von Windows gesucht, also im zuletzt benutzten Ordner. Das ist nicht zwingend der Ordner, in dem deine Datenbank steht.

Wenn du trotzdem relative Pfade einsetzen willst oder musst, dann baue den absoluten Pfad während der Laufzeit aus den aktuellen Gegebenheiten zusammen. Den aktuellen Pfad deiner Datenbank bekommst du auf diese Weise:

strAktuellerPfad = CurrentProject.Path


In deinem Fall solltest du deine Codezeile auf die folgende Weise abändern:

 pfadExcel1 = CurrentProject.Path & "\pdss\Macros\Hotel.xls"


So kannst du sicherstellen, dass die Exceltabelle immer in diesem Unterordner deiner Access-Datenbank gesucht wird.

Diese Lösung sollte bei Access 2000 oder höher funktionieren. Ich weiss im Moment nicht, ob "CurrentProject" von Access 97 unterstützt wird. Falls dem nicht so ist und du Access 97 einsetzt, dann kann der Pfad der aktuellen Datenbank von der Name-Eigenschaft des Database-Objekts entnommen werden, allerdings müsste dann der Dateiname mit etwas Bastelarbeit entfernt werden.

strAktuelleDatenbank = CurrentDb.Name


Gruss
PotzBlitz

Antwort 2 von Marie

Nein PotzBlitz, "CurrentProject" wird von Access 97 nicht unterstützt.
Aber den aktuellen Pfad kannst Du vom Datenbanknamen trennen mit:

strAktuelleDatenbank = CurrentDb.Name
I = Len(strAktuelleDatenbank)
Do Until Mid$(strAktuelleDatenbank, I, 1) = Chr$(92)
I = I - 1
Loop
Pfad = Left$(strAktuelleDatenbank, I)

Gruß Marie