Hallo,
im Beispieldokument habe ich in Anlehung zu diesem Thread ein UDF geschrieben.
Der Ausdruck/ String z.B. 1+1 wird per UDF in eine berechenbare Formel
umgewandelt und das korrekte Ergebnis wird in Spalte B ausgegeben.
Der Aufruf der Funktion erfolgt über =Auswerten(A1)
Allerdings bleibt die aufrufende Funktion in den Zellen der Spalte B nicht erhalten.
Sie wird vom Ausdruck aus Zelle A1 (=1+1) überschrieben.
Wie muss ich die Funktion umschreiben, dass mir einerseits der Funktionsaufruf
in der Zelle erhalten bleibt, als auch das Ergebnis geliefert wird?
🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱
🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀
>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗
[gelöst]UDF soll mir Ergebnis liefern und die aufrufende Funktion soll in Zelle erhalten bleiben
[gelöst]UDF soll mir Ergebnis liefern und die aufrufende Funktion soll in Zelle erhalten bleiben
Zuletzt geändert von craig am Di 10. Mär 2020, 22:03, insgesamt 1-mal geändert.
Gruß
Craig
Nie die Sicherungskopie vergessen!
════════════════════════════════════════════════
WIN 10 Pro 64-Bit • LO 7.4.5.1 (x64) • AOO 4.1.8
Craig
Nie die Sicherungskopie vergessen!
════════════════════════════════════════════════
WIN 10 Pro 64-Bit • LO 7.4.5.1 (x64) • AOO 4.1.8
Re: UDF soll mir Ergebnis liefern und die aufrufende Funktion soll in Zelle erhalten bleiben
Hallo,
die aktuelle Zelle muss ja nicht die Zelle sein, in der die Funktion steht. Wenn du A2 änderst (nach Enter ist A3 aktiv), erwartest du, dass die Berechnung in D2 neu erfolgt.
Eine Variante (ich bin mir nicht sicher, ob nicht noch ein Haken dabei ist, da eine UDF "üblicherweise" nur die Zelle beeinflusst in der sie steht) wäre, dass man sich eine Zelle aussucht, die "mit Sicherheit" nicht anderweitig benutzt wird und dort die Formel hineinschreibt.
die aktuelle Zelle muss ja nicht die Zelle sein, in der die Funktion steht. Wenn du A2 änderst (nach Enter ist A3 aktiv), erwartest du, dass die Berechnung in D2 neu erfolgt.
Eine Variante (ich bin mir nicht sicher, ob nicht noch ein Haken dabei ist, da eine UDF "üblicherweise" nur die Zelle beeinflusst in der sie steht) wäre, dass man sich eine Zelle aussucht, die "mit Sicherheit" nicht anderweitig benutzt wird und dort die Formel hineinschreibt.
Code: Alles auswählen
Function Auswerten(a)
oSheet=ThisComponent.sheets(0)
oCell=oSheet.getCellByPosition(1000,1000)
oCell.Formula="=" & a
Auswerten=oCell.Value
End Function
Gruß,
mikele
mikele
Re: UDF soll mir Ergebnis liefern und die aufrufende Funktion soll in Zelle erhalten bleiben
Hallo mikele,
vielen Dank!
Zu D2:
Wenn ich in D2 =B2+1 schreibe, dann erfolgt eine korrekte Berechnung.
sobald ich aber den Ausdruck in A2 ändere, erhalte ich einen Error 522 (Zirkelbezug)
Den Fehler 522 kann man übergehen, in dem die Iteration eingeschaltet wird:
LibreOffice Calc --> Berechnen --> Iteration
Jetzt funktioniert es, zumindest was ich bis jetzt sagen kann.
Auch in Kombination mit anderen Funktionen:
=WURZEL(AUSWERTEN(A2))
Potenzieren funktioniert auch
=5*22^4
Ich rechne bei größeren Tabellen damit, dass auf Grund der Iteration die Performance leidet.
Auch wenn man die Iterations-Schritte auf max. 10 einstellt.
Man könnte sich den "Umweg" (getCellByPosition(1000,1000)) sparen, wenn es
eine Möglichkeit gäbe, dass diese Art von Strings umwandelbar/ berechenbar wären.
Ich vermute dass mit oCell.formular wohl ein komplexer Algorithmus wirksam wird.
Wie sonst läßt sich sonst erklären, dass die Zahlen und die Operatoren richtig erkannt werden.
Nun will ich das Thema nicht auf die Spitze treiben.
Zumal es mir in erster Linie darum ging, warum meine Funktion nicht in der aufrufenden Zelle stehen blieb.
Fazit:
BIs dann...
vielen Dank!
Stimmt, da habe ich mich wohl verrannt.mikele hat geschrieben:die aktuelle Zelle muss ja nicht die Zelle sein, in der die Funktion steht. Wenn du A2 änderst (nach Enter ist A3 aktiv), erwartest du, dass die Berechnung in D2 neu erfolgt.
Zu D2:
Wenn ich in D2 =B2+1 schreibe, dann erfolgt eine korrekte Berechnung.
sobald ich aber den Ausdruck in A2 ändere, erhalte ich einen Error 522 (Zirkelbezug)
Den Fehler 522 kann man übergehen, in dem die Iteration eingeschaltet wird:
LibreOffice Calc --> Berechnen --> Iteration
Jetzt funktioniert es, zumindest was ich bis jetzt sagen kann.
Auch in Kombination mit anderen Funktionen:
=WURZEL(AUSWERTEN(A2))
Potenzieren funktioniert auch
=5*22^4
Ich rechne bei größeren Tabellen damit, dass auf Grund der Iteration die Performance leidet.
Auch wenn man die Iterations-Schritte auf max. 10 einstellt.
Dies ist ersteinmal völlig OK.mikele hat geschrieben:Eine Variante (ich bin mir nicht sicher, ob nicht noch ein Haken dabei ist, da eine UDF "üblicherweise" nur die Zelle beeinflusst in der sie steht) wäre, dass man sich eine Zelle aussucht, die "mit Sicherheit" nicht anderweitig benutzt wird und dort die Formel hineinschreibt.Code: Alles auswählen
oCell=oSheet.getCellByPosition(1000,1000)
Man könnte sich den "Umweg" (getCellByPosition(1000,1000)) sparen, wenn es
eine Möglichkeit gäbe, dass diese Art von Strings umwandelbar/ berechenbar wären.
Ich vermute dass mit oCell.formular wohl ein komplexer Algorithmus wirksam wird.
Wie sonst läßt sich sonst erklären, dass die Zahlen und die Operatoren richtig erkannt werden.
Nun will ich das Thema nicht auf die Spitze treiben.
Zumal es mir in erster Linie darum ging, warum meine Funktion nicht in der aufrufenden Zelle stehen blieb.
Fazit:
- Mein Problem ist gelöst
- Diese Funktion ist nur bedingt einsetzbar.
- Weitreichende Fehler sind nicht ausgeschlossen.
BIs dann...
Gruß
Craig
Nie die Sicherungskopie vergessen!
════════════════════════════════════════════════
WIN 10 Pro 64-Bit • LO 7.4.5.1 (x64) • AOO 4.1.8
Craig
Nie die Sicherungskopie vergessen!
════════════════════════════════════════════════
WIN 10 Pro 64-Bit • LO 7.4.5.1 (x64) • AOO 4.1.8
An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:
Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.