Wie per Makro ein "Datei öffnen" mit dem richtigen Pfadnamen ausführen

Per Makro möchte ich den Befehl “Datei öffnen” aufrufen und dabei den Pfadnamen (idealerweise den relativen Pfadnamen, damit das Makro auch auf anderen Rechnern noch läuft) festlegen. Unter Verwendung des Makro-Rekorders finde ich: (Inzwischen gelöscht) kann hier aber keinen Pfad-Namen einstellen. Im Netz habe ich ein Makro gefunden:

mit dem ich zumindest den absoluten Pfad einstellen kann (wie gesagt, der relative wäre mir lieber), aber witzigerweise wird nach Auswahl einer Datei aus dem Öffnen-Dialog und Doppelklick auf die Datei oder drücken des Buttons “öffnen” die Datei nicht geöffnet. Ideen? ERGÄNZUNG nach Antwort von Robert: Mit dem Makro: Bildbeschreibung passiert gar nichts. Zur Erläuterung: Im Feld “Weitere Quellen” ist der Dateiname mit Extension abgespeichert. Nach meinem Verständnis sollte durch die Makro-Anpassung von Robert dieser Dateiname ausgelesen werden (stUrl), um den relativen Pfadnamen (arUrl_start()) ergänzt werden und an die Anwendung mit “execute” übergeben werden. Funktioniert aber nicht. (Anmerkung: Die Datenbank liegt im Ordner “DB” und der im Ordner “Mineralien”. Im gleichen Ordner “Mineralien” ist der Unterordner “Fotos Sammlung Auswahl” und darin der Ordner “Mineralgruppen”. Dort sind die Textdokumente abgelegt.)

Anmerkung In Deinem init_path = in Zeile 121 fehlt mir persönlich ein / vor dem "home/....

Wenn ich mit die Umgewandelte URL anschaue, steht mit und ohne das “/” hinterher “file:///home…”. Es macht keinen Unterschied.

Ok - ich hätte zwei // nach der Umwandlung erwartet

Nö, noch mal ausprobiert, in beiden Fällen drei /.

Wie hast Du die Inhalte von “Weitere Quellen” eingelesen? Wenn dies mit einem Bildauswahlfeld geschieht, dann müsste dort nicht nur der Dateiname sondern der Pfad ab Deiner Datenbankdatei drin sein. Also: "../Fotos Sammlung Auswahl/Mineralgruppen"
Diese Stück des Pfades wird bei Dir fehlen.

Zeige hier doch einmal, was msgbox stFeld ausgibt.

Warum Du für die Datenbankdatei einen gesonderten Ordner angelegt hast ist mir nicht klar, da es sich doch nur um eine Datei handelt. Einfacher wäre da die Datenbankdatei und von dort in Unterordnern so etwas wie “Fotos” usw.

Inhalt “weitere Quellen” ist nur der Name ohne Pfad. Wenn ich den Namen über ein Bildauswahlfeld einfüge, bekomme ich den Pfad wie Du ihn oben angibst ("…/Fotos%20Sammlung%20Auswahl/Mineralgruppen/%C3%9Cbersicht%20Granate.odt") Wenn ich diesen Pfad+Dateinamen dem execute übergebe, passiert: Nichts. Wenn ich mir bei Deiner Sequenz stFeld anzeigen lasse, dann steht da: “home/volker/Dokumente/Mineralien/Fotos%20Sammlung%20Auswahl/DB/0%20DB_Mineralien.odb%C3%9Cbersicht%20Granate.odt” d.h., der Name der Datenbank ist mit reingewurschtelt und es ist auch keine relative, sondern die absolute Adresse. Der gesonderte Ordner hat historische Gründe, da sonst abgespeicherte Pfadnamen für Bilddateien nicht mehr funktionieren würden.

Ohne Beispiel ist das für mich jetzt ein Stochern im Nebel.
Lade Dir doch einmal diese Beispieldatenbanken runter und teste dort “Beispiel_Dateien_einbinden”. Das macht genau das, was ich beschrieben habe, nur mit Icons, die eben im Pfad einer Datenbank in einem Unterordner liegen.

Habe das jetzt auch mit Bildern getestet, die in einem völlig anderen Verzeichnis lagen (mehrere Schritte aufwärts von dem Verzeichnis der Datenbank aus, mehrere Schritte abwärts in ein anderes Verzeichnis. Klappt ohne Probleme. In der Tabelle steht

../../../../NW/Lehrplaene/DB_Bilder/min-Farbfilter_Dreiecksprisma_x_Halbkreis.JPG

Und dieses Bild wird problemlos über das obige Makro mit einem Bildbetrachtungsprogramm angezeigt.

Ich werde mich morgen mal da rein vertiefen. Anmerkung: Meine Bilddateien kann ich alle mit relativen Pfad adressieren, das klappt schon die ganze Zeit. Versuch doch mal ein Text-Dokument auf Deinem Wege mit relativem Pfad zu öffnen.

Fast der gleiche Pfad wie das obige Bild, jetzt nur eine *.odt-Datei. Die kann ich ja inzwischen auch mit dem grafischen Kontrollfeld einlesen. Ich speichere die Eingabe, die ich gerade gemacht habe und rufe dann das Dokument über den Button mittels Makro auf: Klappt.

Das Problem lag darin, dass in meinem Dateinbank-Dateiname ein Leerzeichen enthalten war. Dadurch hat der Befehl arUrl_Start = split(oDoc.Parent.Url,oDoc.Parent.Title) nicht funktioniert, so dass nicht nur der Pfad, sondern auch der Datenbankname abgelegt wurde. Daran noch der Dateiname drangehängt führt ins Leere. Wenn ich das Leerzeichen im Datenbanknamen durch einen Unterstrich ersetze läuft alles. Danke.

Sorry, Handbuch S. 494 “Aufruf von Anwendungen zum Öffnen von Dateien”. Makro von dort:

. Dadurch wird der Dateiname aus einem Feld ausgelesen und die Datei direkt geöffnet. Wenn kein Dateiname in dem Feld steht, geht der “Datei öffnen”-Dialog auf und man kann eine beliebige dort vorhandene Datei öffnen. Nur mit dem relativen Pfad - das klappt nicht - Hat da jemand Ideen?

Den relativen Pfad ermittelst Du in der Regel über Dein Base-Dokument, denn die Abspeicherung von Pfaden in einer Datenbank wird immer relativ vollzogen. Schau Dir dazu einmal die Beschreibung der Beispieldatenbanken an, insbesondere “Dateien einbinden”:

oFeld = oForm.getByName("GraphischesFeld")
stUrl = oFeld.BoundField.getString
arUrl_Start = split(oDoc.Parent.Url,oDoc.Parent.Title)
oShell = createUnoService("com.sun.star.system.SystemShellExecute")
stFeld = convertToUrl(arUrl_Start(0) + stUrl)
oShell.execute(stFeld,,0)