eigene Funktion keine Aktualisierung

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: eigene Funktion keine Aktualisierung

Re: eigene Funktion keine Aktualisierung

von Karolus » Do, 03.10.2013 08:44

Hallo
Das Hauptproblem bei eigenen Funktionen ist meines Erachtens, dass keine Zellobjekte sondern nur Zellinhalte an die Funktion übergeben werden
Dafür müstest du deine Funktion als AddIn in eine xyz.oxt stecken und in der Schnittstellen-definition ( im ..idl File ) das Argument als ::com::sun::star::table::XCellRange festlegen. siehe hier

Karolus

Re: eigene Funktion keine Aktualisierung

von CalcWeiss » Do, 03.10.2013 08:07

Das Hauptproblem bei eigenen Funktionen ist meines Erachtens, dass keine Zellobjekte sondern nur Zellinhalte an die Funktion übergeben werden. Man schlägt sich also mit einem Wert oder einem Array herum und hat keine Möglichkeit, auf die Adresse der Zelle zurück zugreifen. Bei =myFunc(A1) und =myFunc(B2) sieht die Funktion also keinen Unterschied, sofern sich der Zellinhalt nicht unterscheidet.

Eine Option wäre möglicherweise die Funktion =myFunc(A1, "A1"), bei der der erste Parameter für eine Aktualisierung sorgt, der zweite lediglich als Referenz dient. Aber falls sich am Sheet etwas verändert, z.B. eine neue Zeile ganz oben eingefügt wird, dann ändert sich die Funktion automatisch in
=myFunc(B1, "A1") und erfüllt nicht mehr ihren Zweck. Besser ist es, den ganzen Bereich abzudecken, der in der Funktion ausgewertet werden soll, denn dann bekommt man ein Array über alle Werte und braucht sich nicht mehr mit Zellobjekten herum zu schlagen.

Re: eigene Funktion keine Aktualisierung

von clag » Mi, 02.10.2013 19:45

Hallo Stephan

sorry, ich hatte deine Antwort noch garnicht registriert, war nicht auf so hohe Antwortfrequenz eingestellt :D
werd jetzt aber gleich mal schauen ob ich das umsetzen kann was der Link aufzeigt :)
Danke


ha und für Karolus natürlich auch der zwischendurch aktiv war

also ALLEN gilt mein DANK

Re: eigene Funktion keine Aktualisierung

von Karolus » Mi, 02.10.2013 19:45

Hallo

Aus der alten Bastelkiste:

Code: Alles auswählen

function multikette( abereich as variant , trennzeichen as string )

dim astring( ubound(abereich,1)* ubound(abereich,2) - 1 )
 
for i = 1 to ubound(abereich,1)
	for si = 1 to ubound(abereich,2)			
      	astring(iii) = abereich(i,si)
      	iii = iii +1
	next si
next i


multikette = join(astring(),trennzeichen)

end function
Karolus

Re: eigene Funktion keine Aktualisierung

von Stephan » Mi, 02.10.2013 19:36

kann man das besser gestallten?
Ja, und ich hatte Dir ein Beispiel bereits auf dem Silbertablet serviert.


Stephan

Re: eigene Funktion keine Aktualisierung

von clag » Mi, 02.10.2013 19:22

ah oh

hm
kann man das besser gestallten?
ich würde mir schon wünschen, das "meine Funktion" genau wie eine "Calc Funktion" immer bei einer Änderung in der Tabelle aktualisiert wird.
Wenn ich es ohne die "" also =LISTEX(A1:B10) versucht habe was mir viel besser gefällt, hat Basic immer gemeckert.

Re: eigene Funktion keine Aktualisierung

von Stephan » Mi, 02.10.2013 19:18

ein Text ("A1:B10") ist kein Zellbereich(sobjekt) (A1:B10). Wenn die Funktion sich selbst aktualisieren soll darfst Du generell keinen Text übergeben und müßtest im Falle der benutzerdefinierten Funktion diese entsprechend umschreiben.
Ein Beipiel das das für Zahlen demonstriert findet sich in:
http://www.calc-info.de/files/Calc_StarBasic.pdf

Kapitel 10.2, Function summenTest()


Gruß
Stephan

Re: eigene Funktion keine Aktualisierung

von Karolus » Mi, 02.10.2013 19:05

Hallo
Calc "sieht" da nur den Text 'A1:B10' als Argument, zum Zellbereichsobject wird das erst in der Funktion aufgelöst.
Daher musst du per strg+shft+F9 aktualisieren.

Karolus

Re: eigene Funktion keine Aktualisierung

von clag » Mi, 02.10.2013 18:48

Hallo CalcWeis
erstmal danke,
deine BspFunktion funktioniert und wird aktualisiert

Hi Karo

bin grade dabei :)

Code: Alles auswählen

FUNCTION LISTEX(myra)
	oSheet = Thiscomponent.CurrentController.ActiveSheet
    oRange = oSheet.getcellrangebyname (myra)
    for i = 0 to ubound(orange.data(0))
        for k = 0 to ubound (orange.data)
            oCell = oRange.getcellbyposition(i,k)
            liste = liste & ";" & oCell.string
        next k
    next i
	LISTEX=liste
End FUNCTION
so steht die formel in der Zelle
=LISTEX("A1:B10")

gibt auch beim ersten Enter das richtige Ergebnis aus, eine Liste aller Zellinhalte aus dem gewählten Bereich mit ";" getrennt
wird dannach aber nicht mehr aktualisiert

Gespeichert wird in "Meine Makros & Dialoge_Standard_Funktionen"

Re: eigene Funktion keine Aktualisierung

von Karolus » Mi, 02.10.2013 18:43

Hallo
@clag
Postest du deine eigene Funktion ??

Karolus

Re: eigene Funktion keine Aktualisierung

von CalcWeiss » Mi, 02.10.2013 16:52

Schau mal im angehängten Beispiel. In Zelle B2 steht eine eigene Funktion, die sich auf A2 bezieht. Wenn ich in A2 etwas eintrage, erscheint eine Kopie in B2.
Wichtig: Die Funktion muss unter Standard stehen und Makros müssen erlaubt sein. Außerdem darf die Funktion keinen Fehler haben. Wenn es noch Klärungsbedarf gibt, lad mal einen Code-Snippet hoch.
Dateianhänge
Meins.ods
Beispiel eigene Funktion
(8.8 KiB) 104-mal heruntergeladen

eigene Funktion keine Aktualisierung

von clag » Mi, 02.10.2013 15:52

hallo Kenner und und Könner

versuche mich gerade daran eigenen Funktionen zu erstellen.
Dabei ist mir aufgefallen, das die eigene Funktionen nicht automatisch aktualisiert werden
auch nicht bei F9 nur wen der Zelleninhalt echt editiert wurde wird nach dem Enter die Funktion ausgeführt,
danach nicht mehr, selbst wenn man Zellinhalte ändert auf die sich die Funktion bezieht.

Das kann doch so nicht gewollt sein oder?
Was klemmt da bzw was könnte die Ursache für das Verhalten sein?

Nach oben