Hallo Günter, g.wall...@web.de schrieb: > ich hatte ja schon geschrieben, daß mit diese Variante am > sympathischsten ist ... > aber wie wende ich diese Funktion an? > > Wie gesagt: Ich wollte *automatisch* ermitteln, wie der absolute Pfad > auf meinem Rechner für *diese* Datei lautet ... > und das Ganze soll auch noch korrekt funktionieren, wenn die Datei > verschoben wird! > > Mein Stöbern in Deinem Buch "Tabellenkalkulation ... 3" hat mir auch > nicht viel weiter geholfen. Insbesondere gibt es dort kein > Beispiel für > 'ThisComponent.Location'
Ein Beispiel findet sich dort auf Seite 261 in Form der benutzerdefinierten Funktion DATEINAME, in dieser wird ThisComponent.Location verwendet. > Ich habe die Funktion einmal (lokal) in eine CALC-Datei (über die > Macro-IDE) eingefügt, weiß aber nicht, wie ich die dann im > Tabellenblatt > anwende. > > Das habe ich gemacht: > > in irgendeiner Zelle im Calc-Dokument habe ich geschrieben > > =NurPfad() > > Die Funktion startet, aber es kommt die Fehlermeldung "Objektvariable > nicht belegt" Das Vorgehen iost korrekt, die Fehlermeldung deutet jedoch für mich darauf hin das Du etwas anders getan hast als Du beschreibst, denn ich würde diese Fehlermeldung erwarten wenn die benutzerdefinierte Funktion nicht im Dokument sondern lokal bei z.B. den persönlichen Makros ('Meine Makros') gespeichert wäre und dann im Dokument aufgerufen wird. > Was ist eigentlich mit 'Main' ... Ein 'Platzhalter', ein Beispiel für einen Makronamen, ... > das habe ich (in der IDE) durch die > angegebene Funktion ersetzt. War das falsch? Nein, das ist in Ordnung > Ist die Schreibweise (Groß-Klein) eigentlich relevant? Im Konkreten ist diese hier nicht relevant, es gibt aber Stellen wo sie eine Rolle spielt und auch Stellen wo das Verhalten nicht sofort offensichtlich scheint, jedoch durch falsche Schreibung Fehler entstehen, z.B.: Sub Main If ThisComponent.SupportsService("com.sun.star.sheet.SpreadsheetDocument") Then Msgbox "Tabellendokument" End If End Sub Hier muß der Teil "com.sun.star.sheet.SpreadsheetDocument" genauso lauten, schon eine geringe Änderung in "com.sun.star.Sheet.SpreadsheetDocument" oder "com.sun.star.sheet.SpreadSheetDocument" oder "com.sun.star.sheet.spreadsheetDocument" oder ... führt dazu das es nicht mehr funktioniert. Ebenso ist Groß-/KLeinschreibung wichtig bei z.B. Namen von Steuerelementen oder auch teils bei Variablennamen in Makros wlche multiplattformfähig sein sollen. Ich würde also raten im Zweifelsfall immer Groß- und Kleinschreibung zu benutzen. > Vielleicht kannst Du mir einmal ein vollständiges > Mini-Beispiel zukommen > lassen? Da Du das Buch hast kannst Du das dort vorhandene Beispiel benutzen, in der Datei FunktionDATEINAMEKap67.xls zeige ich ein Beispiel wie man mittels Code eine benutzerdefinierte Funktion schreibt, welche sowohl unter MS Excel (VBA) als auch unter OOo Calc (StarBasic) direkt, ohne Änderungen funktioniert: Function DATEINAME() On Error Goto xls pfad = ThisComponent.Location teilen = split(pfad,"/") DATEINAME = teilen(UBound(teilen)) Exit Function xls: DATEINAME = ThisWorkbook.Name End Function Das Ganze ist auch in Form der Datei FunktionDATEINAMEKap67.ods verfügbar, und es reicht dann für Deine angefragten Zwecke aus die Funktion z.B. so zu kürzen: Function DATEINAME() pfad = ThisComponent.Location teilen = split(pfad,"/") DATEINAME = teilen(UBound(teilen)) End Function Beide Dateien befinden sich auf der Buch-DVD im Ordner: ../Buchdateien/Kapitel_06/ Gruß Jörg --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@de.openoffice.org For additional commands, e-mail: users-h...@de.openoffice.org