Pfad der aktiven Exceldatei auslesen und diesen als Startordner im Filedialog festlegen
Hallo,
ich arbeite mit vba unter excel.
Ich habe einen Filedialog zur Ordnerauswahl.
Wenn der Filedialog öffnet befindet er sich standartmäßig im Ordner "Eigene Dateien". Ich würde aber als Startordner gerne den Ordner haben, wo auch die Excel-Datei abgelegt ist.
Geht das?wenn ja wie?
Vielen Dank im Vorraus.
ich arbeite mit vba unter excel.
Ich habe einen Filedialog zur Ordnerauswahl.
Wenn der Filedialog öffnet befindet er sich standartmäßig im Ordner "Eigene Dateien". Ich würde aber als Startordner gerne den Ordner haben, wo auch die Excel-Datei abgelegt ist.
Geht das?wenn ja wie?
Vielen Dank im Vorraus.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 66605
Url: https://administrator.de/contentid/66605
Ausgedruckt am: 25.11.2024 um 21:11 Uhr
18 Kommentare
Neuester Kommentar
Hallo fcmfanswr!
Eine Frage vorweg: Bist Du Geheimnisträger, oder darfst Du ev doch etwas über die Excel-Version oder sogar ein Stück Code preisgeben?
Wenn ich von einem Standarddialog neueren Datums ausgehe, könnte Dir vielleicht etwas in der Art helfen:
Sollte doch nicht nur die Auswahl eines Ordners, sondern vielleicht einer xls-Datei das Ziel sein, dann etwa:
Wenn es allerdings, wie SvenGuenter vermutet, überhaupt nur darum geht, den Pfad der aktiven Exceldatei auszulesen, dann würde ein Beitragstitel "Pfad der aktiven Exceldatei auslesen" vermutlich besser passen ...
Grüße
bastla
Eine Frage vorweg: Bist Du Geheimnisträger, oder darfst Du ev doch etwas über die Excel-Version oder sogar ein Stück Code preisgeben?
Wenn ich von einem Standarddialog neueren Datums ausgehe, könnte Dir vielleicht etwas in der Art helfen:
objFileDialog.InitialFileName = ActiveWorkbook.Path & "\"
objFileDialog.InitialFileName = ActiveWorkbook.Path & "\*.xls"
Wenn es allerdings, wie SvenGuenter vermutet, überhaupt nur darum geht, den Pfad der aktiven Exceldatei auszulesen, dann würde ein Beitragstitel "Pfad der aktiven Exceldatei auslesen" vermutlich besser passen ...
Grüße
bastla
Hallo fcmfanswr!
Mittlerweile nehme ich zwar an, Dein Problem verstanden zu haben, kann Dir auch eine Erklärung dafür anbieten, warum der Pfad nicht ausgelesen werden kann, habe aber leider keinen Lösungsweg parat.
Auch wenn's nicht wirklich hilft: "ActiveWorkbook.Path" oder "ThisWorkbook.Path" können nur den Wert "" haben, da das Ausführen der xlt-Datei ja (bestimmungsgemäß) eine neue xls-Datei entstehen lässt, welche aber noch nicht gespeichert wurde (daher gibt es noch keinen Speicherpfad). Die xlt-Datei tritt dabei aber (zumindest programmiertechnisch verwertbar) eigentlich nicht in Erscheinung.
Als (leider äußerst schwacher) Trost: Du bist nicht der Erste, der dieses Problem hatte (siehe zB http://www.ozgrid.com/forum/showthread.php?t=26789) ...
@SvenGuenter
Mit CurDir() wirst Du in diesem (speziellen) Fall vermutlich nur den in den Optionen eingetragenen Standardspeicherpfad erhalten ...
Grüße
bastla
Mittlerweile nehme ich zwar an, Dein Problem verstanden zu haben, kann Dir auch eine Erklärung dafür anbieten, warum der Pfad nicht ausgelesen werden kann, habe aber leider keinen Lösungsweg parat.
Auch wenn's nicht wirklich hilft: "ActiveWorkbook.Path" oder "ThisWorkbook.Path" können nur den Wert "" haben, da das Ausführen der xlt-Datei ja (bestimmungsgemäß) eine neue xls-Datei entstehen lässt, welche aber noch nicht gespeichert wurde (daher gibt es noch keinen Speicherpfad). Die xlt-Datei tritt dabei aber (zumindest programmiertechnisch verwertbar) eigentlich nicht in Erscheinung.
Als (leider äußerst schwacher) Trost: Du bist nicht der Erste, der dieses Problem hatte (siehe zB http://www.ozgrid.com/forum/showthread.php?t=26789) ...
@SvenGuenter
Mit CurDir() wirst Du in diesem (speziellen) Fall vermutlich nur den in den Optionen eingetragenen Standardspeicherpfad erhalten ...
Grüße
bastla
hi bastla.
Ich habe das gerade versucht habe ein und die selbe exceldatei auf verschiedenen Laufwerken und da in verschiedenen Ordnern abgelegt die Messagebox hat mir jedesmal den Ort der Datei ausgespuckt von wo Sie geöffnet wurde. Kannst du auch mal testen. Würde mich interessieren ob das nur bei mir ist ( dann würde es an den AddIns liegen ) oder auch bei anderen klappt. Sprich die methode wäre von der funktionalität anders von Version zu Version und das wäre schon gut zu wissen
CurDir gibt nämlich meines Wissens den Pfad an der als Verzeichnis gilt in dem die Datei geöffnet wurde. Wenigstens steht das so in der MSDN
Ich habe das gerade versucht habe ein und die selbe exceldatei auf verschiedenen Laufwerken und da in verschiedenen Ordnern abgelegt die Messagebox hat mir jedesmal den Ort der Datei ausgespuckt von wo Sie geöffnet wurde. Kannst du auch mal testen. Würde mich interessieren ob das nur bei mir ist ( dann würde es an den AddIns liegen ) oder auch bei anderen klappt. Sprich die methode wäre von der funktionalität anders von Version zu Version und das wäre schon gut zu wissen
CurDir gibt nämlich meines Wissens den Pfad an der als Verzeichnis gilt in dem die Datei geöffnet wurde. Wenigstens steht das so in der MSDN
Hallo,
nach einigem Hin und Her habe ich auch keine Lösung gefunden. Selbst bei Microsoft selber habe ich keinen Lösungsansatz bekommen. Dort kommen die Sogar noch mit einer ganz anderen Methode. Und zwar ein xls erzeugen dieses Speichern dann umbenennen als xlt und dieses kann kann aufgerufen werden. Das Problem ist wohl das innerhalb der Vorlage der Erstellungsort der Vorlage gespeichert wird. Dies steht als Information im Dokument drin. Nicht wie bei der xls der Speicherort. Diesen Erstellungsort liest du mit den bekannten Funktionen aus. Tut mir leid wenn ich dir da nicht weiterhelfen konnte. Die einzige alternative sehe ich das man da was in C oder C++ macht was aber glaube ich den Rahmen sprengen würde. Aber das Problem ist klasse und ich werde mal versuchen das weiter zu lösen.
nach einigem Hin und Her habe ich auch keine Lösung gefunden. Selbst bei Microsoft selber habe ich keinen Lösungsansatz bekommen. Dort kommen die Sogar noch mit einer ganz anderen Methode. Und zwar ein xls erzeugen dieses Speichern dann umbenennen als xlt und dieses kann kann aufgerufen werden. Das Problem ist wohl das innerhalb der Vorlage der Erstellungsort der Vorlage gespeichert wird. Dies steht als Information im Dokument drin. Nicht wie bei der xls der Speicherort. Diesen Erstellungsort liest du mit den bekannten Funktionen aus. Tut mir leid wenn ich dir da nicht weiterhelfen konnte. Die einzige alternative sehe ich das man da was in C oder C++ macht was aber glaube ich den Rahmen sprengen würde. Aber das Problem ist klasse und ich werde mal versuchen das weiter zu lösen.
Okay, habe einen Ansatz denke ich (schnell und schmutzig):
liest den Pfad der zuletzt geöffneten Datei aus (auch xlt-Dateien!)
Also in die xlt folgendes Macro rein:
Dann wird die xls im entspr. Ordner unter dem Namen (ohne Dateiendung) der xlt gespeichert...
Vieleicht hilft das ja noch...
Gruß,
Henrik
edit: @bastla: schade, klar, hab das Template einmal gespeichert, deswegen lief das bei mir....
Application.RecentFiles.Item(1).Path
Also in die xlt folgendes Macro rein:
Sub auto_open()
Application.ActiveWorkbook.SaveAs Replace(Application.RecentFiles.Item(1).Path, ".xlt", ".xls")
End Sub
Vieleicht hilft das ja noch...
Gruß,
Henrik
edit: @bastla: schade, klar, hab das Template einmal gespeichert, deswegen lief das bei mir....
@wakko
Nette Idee, aber wenn die xlt "geöffnet" würde, hätten wir das Problem nicht.
Leider dient sie (als Vorlage) nur der Erstellung einer neuen xls und findet daher den Weg in die Liste der "RecentFiles" nur, wenn sie über Excel (über "Datei / Öffnen") tatsächlich zum Bearbeiten geöffnet, nicht aber, wenn sie nur im Explorer per Doppelklick gestartet wird ...
Grüße
bastla
Nette Idee, aber wenn die xlt "geöffnet" würde, hätten wir das Problem nicht.
Leider dient sie (als Vorlage) nur der Erstellung einer neuen xls und findet daher den Weg in die Liste der "RecentFiles" nur, wenn sie über Excel (über "Datei / Öffnen") tatsächlich zum Bearbeiten geöffnet, nicht aber, wenn sie nur im Explorer per Doppelklick gestartet wird ...
Grüße
bastla