[GELÖST] Makro / Calc: Formel richtig übernommen, falsche Berechnung

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

Moderator: Moderatoren

Benutzeravatar
Julia NuN
**
Beiträge: 38
Registriert: Mo, 07.11.2016 14:57

[GELÖST] Makro / Calc: Formel richtig übernommen, falsche Berechnung

Beitrag von Julia NuN »

Hallo geliebtes Forum,

ich habe ein Dokument, in das eine Formel per Makro zwar an den richtigen Stellen eingetragen wird, jedoch errechnet Calc das Ergebnis nicht. Im Formelassistenten wird allerdings das richtige Ergebnis angezeigt, nur nicht in der Zelle. Die Zelle ist als Zahl formatiert.

Wenn ich im Sheet die per Makro eingesetzte Formel aus der Eingabezeile herauskopiere und woanders einsetze, funktioniert sie...

Code: Alles auswählen

Dim oDoc as Object
Dim RowIndex as integer
Dim i as integer

Sub Zehn_Prozent
	oDoc = ThisComponent
	mySheet = ThisComponent.getcurrentcontroller.activesheet
  
For RowIndex = 9 to 39 step +1 'vorwärts iterieren
	i = RowIndex +1
	oFormulaZehn = "=IF(ISERROR(I" & i & "*B" & i & "*0,1);"""";(I" & i & "*B" & i & "*0,1))"
	mysheet.getCellByPosition(2, RowIndex).Formula = oFormulaZehn
next
End Sub
Wenn mir da jemand helfen könnte, wäre das toll!

LG Julia NuN
Dateianhänge
Die Formel wurde richtig eingetragen, siehe Eingabezeile. Ein ISTFEHLER ist nicht vorhanden, auch wenn man die entsprechenden Spalten nicht sehen kann... ;-)
Die Formel wurde richtig eingetragen, siehe Eingabezeile. Ein ISTFEHLER ist nicht vorhanden, auch wenn man die entsprechenden Spalten nicht sehen kann... ;-)
Bildschirmfoto.PNG (27.27 KiB) 10771 mal betrachtet
Zuletzt geändert von Julia NuN am Fr, 18.11.2016 12:04, insgesamt 1-mal geändert.
Wilhelm Busch: "Ein jeder Wunsch, wenn er erfüllt, kriegt augenblicklich Junge."
... ich glaub, der wär heutzutage Programmierer und nicht Schriftsteller.
Karolus
********
Beiträge: 7438
Registriert: Mo, 02.01.2006 19:48

Re: Makro / Calc: Formel richtig übernommen, falsche Berechnung

Beitrag von Karolus »

Hallo

Du benutzt LO5.x ? …
Trage in C3 die Formel ein:

Code: Alles auswählen

=WENNFEHLER(I3*B3*0,1;"")
doppelklicke die rechte untere Ecke von C3 und alles ist gut!

Karolus
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
gschuckar
****
Beiträge: 140
Registriert: Fr, 24.02.2006 14:27

Re: Makro / Calc: Formel richtig übernommen, falsche Berechnung

Beitrag von gschuckar »

Hallo Julia,
der Fehler liegt begründet in der Vermischung verschiedener Sprachen. Wenn eine Formel per Macro eingefügt wird, dann muss man konsequent english nutzen.
Fazit:
Ersetze in der Formel im Quelltext "0,1" durch "0.1" und dann gehts.
Mit freundlichem Gruß
Gerd
Benutzeravatar
balu
********
Beiträge: 3810
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Makro / Calc: Formel richtig übernommen, falsche Berechnung

Beitrag von balu »

Moin moin

@Julia
Eigentlich ist dein Makro vom Aufbau her gesehen in Ordnung, lediglich ein paar kleine Änderungen und schon müsste es laufen.

Code: Alles auswählen

Dim oDoc as Object
Dim RowIndex as integer
Dim i as integer

Sub Zehn_Prozent
   oDoc = ThisComponent
   mySheet = ThisComponent.getcurrentcontroller.activesheet
 
For RowIndex = 9 to 12 step +1 'vorwärts iterieren'
   i = RowIndex +1
   oFormulaZehn = "=WENN(ISTFEHLER(I" & i & "*B" & i & "*0,1);"""";(I" & i & "*B" & i & "*0,1))"
   mysheet.getCellByPosition(2, RowIndex).FormulaLocal = oFormulaZehn
next
End Sub
1.
Nimm ruhig die deutsche schreibweise der Funktionsnamen.
Also anstatt:
IF(ISERROR(
nimm:
WENN(ISTFEHLER(

2.
Vergess einfach:
Formula
nimm:
FormulaLocal
Denn FormulaLocal ist das Zauberwort welches Du nicht wusstest, welches dir dein Leben erleichtert. :)
Und nur dadurch ist es möglich deutsch geschriebene Formeln anzuwenden. Man muss also nicht unbedingt mehrsprachig denken, deutsch <-> englisch.

3.
Wenn Du dich davon überzeugt hast das meine Änderungen funktionieren, gehe zum nächsten Schritt über, und zwar:
Karolus hat geschrieben: Du benutzt LO5.x ? …
Trage in C3 die Formel ein:

Code: Alles auswählen

=WENNFEHLER(I3*B3*0,1;"") 
Mit dem einzigen Unterschied, das Du die WENNFEHLER nicht in die Zelle einträgst, sondern in dein Makro, anstatt wie vorhin gezeigt mit *WENN(ISTFEHLER(....*.



@Gerd
gschuckar hat geschrieben: der Fehler liegt begründet in der Vermischung verschiedener Sprachen. Wenn eine Formel per Macro eingefügt wird, dann muss man konsequent english nutzen.
Bist Du dir deiner Worte jetzt noch immer sicher? ;-)
Ich habe die deutsche schreibweise genommen, um eine Formel per Makro einzutragen, und es funktioniert.

Es gibt wohl an anderer Stelle die Regel das man zu 99% die englische schreibweise der Funktionsnamen benutzen muss (auch wenn es da ein paar Ausnahmen gibt), aber das ist ein ganz anderes Thema und gehört hier nicht hin. In diesem Falle hier kann man ruhig meine Änderung nehmen, und alles ist gut.



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Karolus
********
Beiträge: 7438
Registriert: Mo, 02.01.2006 19:48

Re: Makro / Calc: Formel richtig übernommen, falsche Berechnung

Beitrag von Karolus »

Hallo

Wenn man das dann unbedingt per Makro tun möchte, dann besser so:

Code: Alles auswählen

Sub Zehn_Prozent
   sheet = ThisComponent.getCurrentController.Activesheet
   sheet.getCellRangeByName("C10").FormulaLocal = "=WENNFEHLER(0,1*B10*I10;"""")"
   sheet.getCellRangeByName("C10:C13").fillAuto(0,1)
End Sub
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Benutzeravatar
Julia NuN
**
Beiträge: 38
Registriert: Mo, 07.11.2016 14:57

Re: Makro / Calc: Formel richtig übernommen, falsche Berechnung

Beitrag von Julia NuN »

Ihr Lieben, ganz herzlichen Dank für eure Hilfe!
@ balu: Durch Ersetzen von Formula durch FormulaLocal war das Problem gelöst.
@ Gerd: Aber ich habe auch (ohne Local) ausprobiert, das Komma durch einen Punkt zu ersetzen; das hat nicht geklappt. Die Formel selbst im Makro ist ja auch in deutscher Schreibweise. In so einem Fall ist FormulaLocal dann wohl zwingend.
@ Karolus: Ich hab den Code von Karolus übernommen, der ist so schön schlicht. WENNFEHLER und FillAuto werden mich ab jetzt begleiten. :D :D :D

Übrigens handelt es sich um die Überarbeitung einer Tabelle für den Einkauf für meinen kleinen Shop. So kann ich meine Einkaufs-Konditionen (verschiedene Rabatte/Prozente) einstellen und den EK im Vorwege berechnen. Ich hatte der Einfachheit halber ein Anschauungs-Beispiel hochgeladen.

Alles, was ich seit meinen ersten Schritten mit dem Makrorekorder vor zwei Jahren gelernt habe, kann ich übrigens als völliger Autodidakt nur Dank eurer fortwährenden Hilfestellung hier im Forum!
Auch deshalb allergrößten Dank und Respekt an euch!
Julia

PS@Karolus: Ja, ich hab diese Version von Libre Office - ist das nicht so gut?
Wilhelm Busch: "Ein jeder Wunsch, wenn er erfüllt, kriegt augenblicklich Junge."
... ich glaub, der wär heutzutage Programmierer und nicht Schriftsteller.
Karolus
********
Beiträge: 7438
Registriert: Mo, 02.01.2006 19:48

Re: [GELÖST] Makro / Calc: Formel richtig übernommen, falsche Berechnung

Beitrag von Karolus »

Hallo
PS@Karolus: Ja, ich hab diese Version von Libre Office - ist das nicht so gut?
Das ist schon ok. Ich hatte die Frage gestellt weil es die Funktion 'WENNFEHLER' nur in LO seit ca Version 5.? gibt.
So kann ich meine Einkaufs-Konditionen (verschiedene Rabatte/Prozente) einstellen und den EK im Vorwege berechnen
Würdest du die Rabattkonditionen nicht direkt in die Formeln schreiben, sondern aus einer Zelle übernehmen, bräuchtest du den Makroquark ebenfalls nicht, z.B.:

Code: Alles auswählen

=WENNFEHLER($M$1*B10*I10;"")
damit müsstest du nur noch den Rabatt in M1 eintragen, bsplw. 10%
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Benutzeravatar
Julia NuN
**
Beiträge: 38
Registriert: Mo, 07.11.2016 14:57

Re: [GELÖST] Makro / Calc: Formel richtig übernommen, falsche Berechnung

Beitrag von Julia NuN »

uuuuuups, Nachricht doppelt... s.u.
Zuletzt geändert von Julia NuN am Fr, 18.11.2016 16:20, insgesamt 2-mal geändert.
Wilhelm Busch: "Ein jeder Wunsch, wenn er erfüllt, kriegt augenblicklich Junge."
... ich glaub, der wär heutzutage Programmierer und nicht Schriftsteller.
Benutzeravatar
Julia NuN
**
Beiträge: 38
Registriert: Mo, 07.11.2016 14:57

Re: [GELÖST] Makro / Calc: Formel richtig übernommen, falsche Berechnung

Beitrag von Julia NuN »

damit müsstest du nur noch den Rabatt in M1 eintragen, bsplw. 10%
:D :D :D :D
Da hast du Recht. Was soll ich sagen - darauf bin ich nicht gekommen.
Muss daran liegen, dass ich jetzt lieber Makros schreibe als Sudoku zu spielen beim Einschlafen.
Uuuuund... ich finde die Knöpfe so chic. Bin halt ein Mädchen... ;-)
Wilhelm Busch: "Ein jeder Wunsch, wenn er erfüllt, kriegt augenblicklich Junge."
... ich glaub, der wär heutzutage Programmierer und nicht Schriftsteller.
Benutzeravatar
balu
********
Beiträge: 3810
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: [GELÖST] Makro / Calc: Formel richtig übernommen, falsche Berechnung

Beitrag von balu »

Hallo,
Karolus hat geschrieben: Ich hatte die Frage gestellt weil es die Funktion 'WENNFEHLER' nur in LO seit ca Version 5.? gibt.
Nur in LO ist so weit korrekt, wenn man noch AOO in den vergleich mit einbezieht. Aber die Funktion gibts dort schon länger, eben in der 4.1.0 gegegenkontrolle gemacht und da gibts sie schon, von daher würde ich sagen seit dem 4er Zweig. Das aber nur so als Info.


Julia NuN hat geschrieben: ich finde die Knöpfe so chic. Bin halt ein Mädchen... ;-)
Ich finde die Knöpfe auch so chic. Bin halt ein Junge :lol:

Aber im Ernst, es ist doch nicht verkehrt wenn man ein bischen Makro lernt auch wenn man es nicht sofort braucht. Früher oder Später kann man das Wissen doch ganz gut gebrauchen.



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
gschuckar
****
Beiträge: 140
Registriert: Fr, 24.02.2006 14:27

Re: Makro / Calc: Formel richtig übernommen, falsche Berechnung

Beitrag von gschuckar »

Moin Balu,
balu hat geschrieben: @Gerd
gschuckar hat geschrieben: der Fehler liegt begründet in der Vermischung verschiedener Sprachen. Wenn eine Formel per Macro eingefügt wird, dann muss man konsequent english nutzen.
Bist Du dir deiner Worte jetzt noch immer sicher? ;-)
Na klar, sonst hätte ich den Tipp hier nicht gegeben. Im ersten Post von Julia war die Rede von :

Code: Alles auswählen

   oFormulaZehn = "=IF(ISERROR(I" & i & "*B" & i & "*0,1);"""";(I" & i & "*B" & i & "*0,1))"
If(ISERROR ist doch Englisch, oder? Ergo habe ich in diesem Beispiel konsequent english gedacht und gearbeitet. Getestet auf UBUNTU 16.04 64 Bit mit Openoffice 4.1.1. hat das wunderbar funktioniert. Okay, ich hätte 5.1.6.2 nehmen sollen. Nun denn.
Die von Dir angeführte Eigenschaft FormulaLocal kannte ich bis dato nicht und habe die bislang auch nicht genutzt. Das wird sich jetzt ändern. Den Hintergrund der von Julia angegebenen Formel kannte ich nicht. In diesem Fall war das für mich auch nicht von Belang, die Frage war ja:
Wenn mir da jemand helfen könnte, wäre das toll!
Haben wir (Du Balu, Karolus und ich) gemacht und das Problem dabei gelöst. Jeder auf seine Art, und ich glaube: Jeder hat, bevor er einen Tipp gegeben hat, diesen vorher auch getestet.
Ach ja: Ich nutze in diesem Zusammenhang in Basic und Java eigentlich gerne die Methode 'setFormula()'. Find ich übersichtlicher.
Zum Schluss: Es ist immerwieder erhellend, hier im Forum zu lesen und zu schreiben. Dank an Alle
Mit freundlichem Gruß
Gerd
Benutzeravatar
balu
********
Beiträge: 3810
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: [GELÖST] Makro / Calc: Formel richtig übernommen, falsche Berechnung

Beitrag von balu »

Moin moin, Gerd,
Na klar, sonst hätte ich den Tipp hier nicht gegeben.
Das glaube ich dir auch.

If(ISERROR ist doch Englisch, oder? Ergo habe ich in diesem Beispiel konsequent english gedacht und gearbeitet.
Aus dieser Perspektive betrachtet hast Du nix falsch gemacht.

Getestet auf UBUNTU 16.04 64 Bit mit Openoffice 4.1.1. hat das wunderbar funktioniert. Okay, ich hätte 5.1.6.2 nehmen sollen.
Nun, ich habe erst in OO.o 3.2.1 getestet, und dann noch zur Sicherheit in LO 4.2.1.1 das ganze noch mal, da ich mir nicht sicher war ob es denn dort vielleicht irgendwelche Unstimmigkeiten gibt, weil LO ab so ungefähr der 4er Linie ein paar Dinge im Basic geändert hat. Und wäre mir da etwas aufgefallen, hätte ich das gesagt.

Die von Dir angeführte Eigenschaft FormulaLocal kannte ich bis dato nicht und habe die bislang auch nicht genutzt. Das wird sich jetzt ändern.
Was man nicht kennt, kann man auch nicht nutzen. ;-)
Und wenn Du durch mein Beispiel wieder etwas dazu gelernt hast, von einem mittleren Anfänger wie mir, dann ist das doch Prima.

Mir ging es aber bei meiner Frage
balu hat geschrieben: Bist Du dir deiner Worte jetzt noch immer sicher?
eigentlich mehr um diesen Teil deiner Behauptung
Wenn eine Formel per Macro eingefügt wird, dann muss man konsequent english nutzen.
Okay, das hätte ich wohl explizit hervorheben sollen. Hatte ich aber nicht, und sorry dafür.

Haben wir (Du Balu, Karolus und ich) gemacht und das Problem dabei gelöst. Jeder auf seine Art, und ich glaube: Jeder hat, bevor er einen Tipp gegeben hat, diesen vorher auch getestet.
Stimmt so weit. Nur eine kleinigkeit hast Du übersehen; während Du und ich testen, schüttelt Karolus dies einfach so aus seine Ärmel ohne große Probleme. :lol:

Es ist immerwieder erhellend, hier im Forum zu lesen und zu schreiben. Dank an Alle
Seh ich auch so.



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Benutzeravatar
Julia NuN
**
Beiträge: 38
Registriert: Mo, 07.11.2016 14:57

Re: [GELÖST] Makro / Calc: Formel richtig übernommen, falsche Berechnung

Beitrag von Julia NuN »

@Gerd: Asche auf mein Haupt!

Es stimmt, was du sagst; ich hatte die Formel schon auf Deutsch geändert und dann war´s ja erst recht Sprachen-Kuddelmuddel.
Ein Punkt hätte genauso geholfen.
Sorry, war mein Fehler. :mrgreen:
Ihr seid wirklich ein tolles Team!!!

Grüße Julia
Wilhelm Busch: "Ein jeder Wunsch, wenn er erfüllt, kriegt augenblicklich Junge."
... ich glaub, der wär heutzutage Programmierer und nicht Schriftsteller.
Karolus
********
Beiträge: 7438
Registriert: Mo, 02.01.2006 19:48

Re: [GELÖST] Makro / Calc: Formel richtig übernommen, falsche Berechnung

Beitrag von Karolus »

Hallo
während Du und ich testen, schüttelt Karolus dies einfach so aus seine Ärmel ohne große Probleme
Das stimmt so auch nicht, ich benutze nur konsequent die passenden Werkzeuge, und mit Hilfe von Mri, sind es eigentlich nur ein paar Mausklicks die mich zur Methode '…fillAuto' auf (Zellen|Zellbereichen) führen, und recht erfolgsversprechend klingt. Der Rest ist mit etwas nachlesen in der SDK-dokumentation und mit ein paar Tests auch schnell erledigt.

(Die Tests mache ich inzwischen überwiegend in python, und 'übersetze' dann ggf. nach Basic)

Code: Alles auswählen

sheet.getCellRangeByName("C10").FormulaLocal = '=WENNFEHLER(0,1*B10*I10;"")' #python ohne grausames escapen ( """" )innerhalb literaler strings  
Karolus
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Benutzeravatar
balu
********
Beiträge: 3810
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: [GELÖST] Makro / Calc: Formel richtig übernommen, falsche Berechnung

Beitrag von balu »

Hallo Karolus,
Karolus hat geschrieben:
während Du und ich testen, schüttelt Karolus dies einfach so aus seine Ärmel ohne große Probleme
Das stimmt so auch nicht,
Natürlich stimmt das ;-), wenn man sich jetzt nur auf FormulaLocal konzentriert.

Das mit '…fillAuto' ist natürlich ein ganz anderes Thema.
Und Danke dafür das Du uns einen kleinen Einblick in deine Vorgehensweise gewährt hast. :-)



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Antworten