Seite 1 von 1

gelöst : Formel per Makro

Verfasst: Fr, 05.06.2009 00:22
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

Re: Funktion per Makro

Verfasst: Fr, 05.06.2009 00:49
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.

Re: Funktion per Makro

Verfasst: Fr, 05.06.2009 07:36
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

Re: Funktion per Makro

Verfasst: Fr, 05.06.2009 08:33
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

Re: Funktion per Makro

Verfasst: Fr, 05.06.2009 09:57
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

Re: gelöst : Formel per Makro

Verfasst: Sa, 06.06.2009 00:46
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