gelöst : Formel per Makro

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

Moderator: Moderatoren

keksi1970
*****
Beiträge: 464
Registriert: So, 27.01.2008 11:47
Wohnort: DU

gelöst : Formel per Makro

Beitrag von keksi1970 »

hi, ich mag nur wissen, warum foldendes Makro nicht funktioniert :

Code: Alles auswählen

Sub Main
myDoc = thisComponent
mySheet = myDoc.sheets(0)

mycell = mysheet.getCellRangebyname("D1")

formel1 = "=WENN((((GANZZAHL(B6)+((B6-GANZZAHL(B6))*100/60))-"
formel2 = "(GANZZAHL(A6)+((A6-GANZZAHL(A6))*100/60))-GANZZAHL((GANZZAHL(B6)+((B6-GANZZAHL(B6))*100/60))-"
formel3 = "(GANZZAHL(A6)+((A6-GANZZAHL(A6))*100/60))))*60/100)+GANZZAHL((GANZZAHL(B6)+((B6-GANZZAHL(B6))*100/60))- "
formel4 = "(GANZZAHL(A6)+((A6-GANZZAHL(A6))*100/60)))<0;"";(((GANZZAHL(B6)+((B6-GANZZAHL(B6))*100/60))-"
formel5 = "(GANZZAHL(A6)+((A6-GANZZAHL(A6))*100/60))-GANZZAHL((GANZZAHL(B6)+((B6-GANZZAHL(B6))*100/60))-"
formel6 = "(GANZZAHL(A6)+((A6-GANZZAHL(A6))*100/60))))*60/100)+GANZZAHL((GANZZAHL(B6)+((B6-GANZZAHL(B6))*100/60))-"
formel7 = "(GANZZAHL(A6)+((A6-GANZZAHL(A6))*100/60))))"

Formel = formel1 & formel2 & formel3 & formel4 & formel5 & formel6 & formel7
mycell.formula = Formel
End Sub
Als mit der Hand einfügte FOrmel funktionierts, als mit Makro eingefügte nicht (ERR:513)

in A1 steht 5,00 (5,00 Uhr) ind B1 5,10 (5Uhr 10 minuten). zweck des ganzen ist, die Verspätung auszurechnen (in diesem Fall 10 minuten).

aber mich interessiert nur, warum diese Fehlermeldung kommt, obwohl die Formel Buchstabengetreu übernommen wird (ausser klein/groß), welches ich aber auch mit Ucase usw nicht gelöst habe

LG
ANdreas
Zuletzt geändert von keksi1970 am Fr, 05.06.2009 08:34, insgesamt 1-mal geändert.
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Funktion per Makro

Beitrag von turtle47 »

Hallo Andreas,

wenn Du via Makro Formeln in Zellen schreibst, dann musst Du die englische Schreibweise verwenden! 8)

Code: Alles auswählen

    formel1 = "=IF((((INT(B6)+((B6-INT(B6))*100/60))-"
    formel2 = "(INT(A6)+((A6-INT(A6))*100/60))-INT((INT(B6)+((B6-INT(B6))*100/60))-"
    formel3 = "(INT(A6)+((A6-INT(A6))*100/60))))*60/100)+INT((INT(B6)+((B6-INT(B6))*100/60))- "
    formel4 = "(INT(A6)+((A6-INT(A6))*100/60)))<0;"";(((INT(B6)+((B6-INT(B6))*100/60))-"
    formel5 = "(INT(A6)+((A6-INT(A6))*100/60))-INT((INT(B6)+((B6-INT(B6))*100/60))-"
    formel6 = "(INT(A6)+((A6-INT(A6))*100/60))))*60/100)+INT((INT(B6)+((B6-INT(B6))*100/60))-"
    formel7 = "(INT(A6)+((A6-INT(A6))*100/60))))"
Das Ergebnis ist jetzt im wahrsten Sinne des Wortes "FALSCH". Da liegt aber noch was im Argen. :(

Jürgen

Edit: Wenn Du doppelte Anführungszeichen schreiben willst dann musst Du 4 >"< schreiben:

Code: Alles auswählen

"(INT(A6)+((A6-INT(A6))*100/60)))<0;"""";(((INT(B6)+((B6-INT(B6))*100/60))-"
Dann klappt das auch mit der Formel.

Ausserdem sollte
Andreas hat geschrieben:in A1 steht 5,00 (5,00 Uhr) ind B1 5,10 (5Uhr 10 minuten)
bestimmt A6 und B6 heissen.

Dann bekomme ich das Ergebnis 0,1. :D

War scho a bisserl spät ne.
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
Karolus
********
Beiträge: 7535
Registriert: Mo, 02.01.2006 19:48

Re: Funktion per Makro

Beitrag von Karolus »

HalloAndreas
turtle47 hat geschrieben:Hallo Andreas,
wenn Du via Makro Formeln in Zellen schreibst, dann musst Du die englische Schreibweise verwenden! ....
...oder alternativ:
....
mycell.formulalocal = Formel
...

Bist du sicher das du diese Monsterformel benötigst ? - tuts nicht auch schon:
=WENN((B1-A1)>0;(B1-A1)*100;"")

Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
keksi1970
*****
Beiträge: 464
Registriert: So, 27.01.2008 11:47
Wohnort: DU

Re: Funktion per Makro

Beitrag von keksi1970 »

jo, war schon spät, ich habs noch ganz anders gelöst :D

Natürlich meinte ich A6 und B6 (oder halt das Makro soweit ändern daß es auf a! und B1 passt (soll später mit ner Schleife funktionieren)).

@Karolus. formulaLOCAL hat einwandfrei funktioniert. Die Doppelten "" (oder auch ("""")) hab ich beim Posten nur übersehen. Es ging in diesem Post auch nur darum warum ERR 513 kommt und wie man halt so eine "Monsterformel" per Makro schreibt.

und Ja, so eine FOrmel braucht man unbedingt ^^

bei 5,00 Uhr - 5,10 (verspätung 10 minuten) ists ja noch einfach, aber 6,45h - 8,00h sind nun mal nicht 155 Minuten sondern nur 75, bzw 1h15 Minuten :P

Aber nu weiß ich, woran es liegt :)

lg und Danke

Andreas
Karolus
********
Beiträge: 7535
Registriert: Mo, 02.01.2006 19:48

Re: Funktion per Makro

Beitrag von Karolus »

Hallo Andreas
keksi1970 hat geschrieben: und Ja, so eine FOrmel braucht man unbedingt ^^
Ja, wirklich ?
keksi1970 hat geschrieben: bei 5,00 Uhr - 5,10 (verspätung 10 minuten) ists ja noch einfach, aber 6,45h - 8,00h sind nun mal nicht 155 Minuten sondern nur 75, bzw 1h15 Minuten :P

Code: Alles auswählen

=WENN(B1>A1;GANZZAHL(B1-A1)+(0,6*((REST(B1;1)<REST(A1;1)))+REST(B1;1)-REST(A1;1));"")
Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
keksi1970
*****
Beiträge: 464
Registriert: So, 27.01.2008 11:47
Wohnort: DU

Re: gelöst : Formel per Makro

Beitrag von keksi1970 »

und nun geht es weiter :D

nun sollen die einzelnen Zeitwerte addiert werden (extra-Spalte mit namen und summe wenn usw.)

einfach gesagt : ich habe jede Berechnung einzeln ausgeführt (berechne Minuten, Stunden der Ankunft das Zusammengefasst, danach berechne Minuten Stunden der geplanten Ankunft, Berechne differenz in Minuten und Stunden) und daraus dann einfach eine zusammengesetzte FOrmel gebastelt ;)

naja, ich wollte einfach nicht die Formelexperten wegen Dingen belästigen (:D) ) die man , wenn auch etwas komplizierter selbst lösen kann (und anschliessend versteht, wie das aufgebaut ist :P )

Das Ergebnismakro sieht folgendermassen aus :

Berechne die geplante Ankunft in Minuten, die tatsächliche Ankunft in Minuten, Zaehle die Zusammengehörigen zusammen und Zeige das Ergebnis der Minuten in Stunden:Minuten.

Also :

gepAnkunft = (60 * Int(getcellrangebyname("A1").value)) + (100 * (getcellrangebyname("A1").value - Int(getcellrangebyname("A1").value)))
Ankunft = (60 * Int(getcellrangebyname("B1").value)) + (100*(getcellrangebyname("B1").value - Int(getcellrangebyname("B1").value)))

differenz = gepAnkunft - Ankunft REM in Minuten
DiffStunde = int (differenz / 60)
diffMinute = ((differenz / 60) - int (differenz / 60)) * 60/100
Anzeige = DiffStunde + diffMinute

! Achtung : unvollständiger Code !

LG Andreas
Antworten