Macro für den Sheet-Namen

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

July
**
Beiträge: 28
Registriert: So, 23.05.2004 13:12

Macro für den Sheet-Namen

Beitrag von July »

Hallo allerseits,

ich hab im Netz ein Macro gefunden, welches für jede beliebige Zelle in OOCalc den Sheet-Namen zurückgeben soll:

Code: Alles auswählen

REM  *****  BASIC  *****

' Calc Function to return the name of the current Sheet
'
' In any cell . . . =GetSheetName()
' Above will return the name of the current Sheet
   
function GetSheetName()
   GetSheetName = ThisComponent.getCurrentController.getActiveSheet.getName()
end function
Das funktioniert nur teilweise. Zum einen bekomme ich beim Öffnen des Dokuments, welches das Macro verwendet erstmal x Basic-Errors. Hab ich mich dann per okay durchgeklickt, kann ich mit meinem Dokument arbeiten, allerdings liefert das Macro zunächst nichts zurück. Irgendwann klappt es dann plötzlich (kann absolut nicht sagen, warum, versuche immer die Formel mit der Funktion neu "auszuführen" und plötzlich erscheint es dann bei den entsprechenden Zellen).
Was auch nicht bzw. irgendwann später funktioniert ist das Aktualisieren, wenn der Sheet-Name verändert wird.
Da ich noch Null Erfahrungen mit Macros habe, würde ich mich freuen, wenn jemand den ein oder anderen Hinweis für mich hat, wie ich das Problem beheben kann.

July
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Macro für den Sheet-Namen

Beitrag von Stephan »

Es kann sein das das Thiscomponent unter diesen Umständen zu Problemen führt
erstmal x Basic-Errors
dann wäre es wichtig zu wissen welche
Was auch nicht bzw. irgendwann später funktioniert ist das Aktualisieren, wenn der Sheet-Name verändert wird.
Das kommt darauf an was "Aktualisieren" meint, automatisches Aktualisieren kann jedoch bei der Funktion nicht funktionieren, da sie keinerlei Parameter veränderlicher Werte enthält aus denen OOo ableiten könnte das etwas zu aktualisieren wäre. OOo schaut natürlich innerhalb der Tabelle mit in die Funktion, sondern nur deren Aufruf der ja vermutlich so ist:

=GetSheetName()

also parameterfrei. Anderes kann ich den Angaben zunächst nicht entnehmen.


Ich würde ggf. lieber gleich die Tabellenfunktion Zelle() verwenden und aus der Rückgabe von z.B. von:

=Zelle("FILENAME")

den Tabellennamen abtrennen.


Gruß
Stephan
July
**
Beiträge: 28
Registriert: So, 23.05.2004 13:12

Re: Macro für den Sheet-Namen

Beitrag von July »

Hallo Stephan,

danke für Deine Antwort.

Richtig, die Fehlermeldung:

Code: Alles auswählen

Basic runtime error. 
An exception occured. 
Type: com.sun.star.lang.DisposedException
Message: .
Kann damit jemand was anfangen?
Eigentlich hab ich nach einer schnellen Lösung gesucht und muss gestehen, dass ich momentan wirklich null Ahnung hab. Aber wenn es nicht anders geht werd ich mich wohl näher mit der Macro-Programmierung beschäftigen müssen.

VG, July
July
**
Beiträge: 28
Registriert: So, 23.05.2004 13:12

Re: Macro für den Sheet-Namen

Beitrag von July »

ich nochmal, ich hab grad einen kommentar zu dem macro gefunden, welches ich verwenden wollte (englischsprachiges OO-forum):
Don't use Basic functions that rely on actice sheet. There is no active sheet when the function is called the first time on load. The function will give a wrong result when you hit Ctrl+Shift+F9 with any other sheet activated.
kurz und gut - die lösung kommt ohne macro aus (vom selben autor wie der kommentar) und geht wie folgt:
MID(CELL("FILENAME");FIND("#$";CELL("FILENAME"))+2;LEN(CELL("FILENAME")))

trotzdem danke!
July
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Macro für den Sheet-Namen

Beitrag von komma4 »

hier die übersetzte Fassung, Quelle:
von Villeroy, in CODE-tags gesetzt, damit man sie bei einer anderen Auflösung auch lesen kann:

Code: Alles auswählen

=TEIL(ZELLE("FILENAME";B1);FINDEN("#$";ZELLE("FILENAME";B1))+2;256)
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Shirkan
***
Beiträge: 62
Registriert: Di, 21.06.2011 10:34

Re: Macro für den Sheet-Namen

Beitrag von Shirkan »

Liebe Leute,
ich habe obigen Threat gefunden. "=TEIL(ZELLE("FILENAME";B1);FINDEN("#$";ZELLE("FILENAME";B1))+2;256)" funktioniert auch gut.
Ich habe allerdings wieder das Problem, dass sich die Zelle nach dem Umbenneen eines Tabellenblattes nicht automatisch aktualisiert wird. Gibt es da eine Möglichkeit?
Gruß Markus
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Macro für den Sheet-Namen

Beitrag von turtle47 »

Hallo Markus,
Shirkan hat geschrieben:Ich habe allerdings wieder das Problem, dass sich die Zelle nach dem Umbenneen eines Tabellenblattes nicht automatisch aktualisiert wird.
Gibt es da eine Möglichkeit?
Ja, steht genau einen Beitrag über Deinem Post. :shock:
latenightcalc hat geschrieben:A formula can also return the sheet name.
Place this formula into cell B2. It will update when the name of the sheet is changed.

=MID(CELL("filename");FIND("$";CELL("filename"))+IF(ISERR(INDIRECT(B2&".A1"));1;1);LEN(CELL("filename")))
Mit deutschen Funktionsbezeichnungen:

Code: Alles auswählen

=TEIL(ZELLE("filename");FINDEN("$";ZELLE("filename"))+WENN(ISTFEHL(INDIREKT(B2&".A1"));1;1);LÄNGE(ZELLE("filename")))
Gruß
Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Shirkan
***
Beiträge: 62
Registriert: Di, 21.06.2011 10:34

Re: Macro für den Sheet-Namen

Beitrag von Shirkan »

Hallo Jürgen
Vielen Dank, ich verstehe zwar nicht, warum das bei dem Code von komm4 nicht geht aber bei Deinem Code funktioniert, sei es drum!
Markus
Antworten