Herbers Excel-Forum - das Archiv

Problem mit Endlosschleife (@fcs, aber nicht nur)

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Bild

Betrifft: Problem mit Endlosschleife (@fcs, aber nicht nur)
von: proxima05

Geschrieben am: 05.01.2007 00:15:30
Hallo,
mit der hervorragenden Unterstützung von fcs habe ich den folgenden Code erstellen können; dieser funktioniert trefflich. Der Originalthread ist unter dem folgenden Link zu finden
https://www.herber.de/forum/messages/833716.html
Jetzt habe ich noch eine weitere Formel eingefügt (Formula4) (da der Rest funktioniert, lasse ich diesen mal weg); die Formula4 sieht in der Bearbeitungszeile wie folgt aus:
=WENN(A14<>"";(1/(1+$B$6/$B$7)^A14);" ")
==========================================
Private Sub CommandButton1_Click()
Dim Formula4 As String
Dim i As Integer
Dim iCount As range
Formula4 = "=IF(RC[-2]<>"""",(1/(1+R6C2/R7C2)^RC[-2]),"" "")"
If OptionButton1.Value = True Then
range("C14").Select
ActiveCell.FormulaR1C1 = Formula4
range("A15").FormulaR1C1 = Formula3
Zeile = 16
Do Until Cells(Zeile - 1, "A") > range("B5") * range("B7")
Cells(Zeile, "A").FormulaR1C1 = Formula3
Zeile = Zeile + 1
Loop
range("B15").FormulaR1C1 = Formula2
Zeile = 16
Do Until Cells(Zeile - 1, "B") > range("B5") * range("B7")
Cells(Zeile, "B").FormulaR1C1 = Formula2
Zeile = Zeile + 1                       'damit bearbeitet das Makro die jeweils nächste tieferliegende Zeile
Loop
range("C15").FormulaR1C1 = Formula4
Zeile = 16
Do Until Cells(Zeile - 1, "C") = range("A15")
Cells(Zeile, "C").FormulaR1C1 = Formula4
Zeile = Zeile + 1
Loop
End If
End Sub

==========================================
Der Code ...
**************************
range("C15").FormulaR1C1 = Formula4
Zeile = 16
Do Until Cells(Zeile - 1, "C") = range("A15")
Cells(Zeile, "C").FormulaR1C1 = Formula4
Zeile = Zeile + 1
Loop
**************************
... fügt zwar die Formel korrekt ein, läuft aber dann in eine Endlosschleife, die nur mit ESC abgebrochen werden kann. Im Code-Fenster wird dann die vorletzte Zeile (Zeile = Zeile +1) markiert. Woran kann das liegen, dass er kein Ende findet? Bei den anderen Formeln tritt das nicht auf; die "Do Until"-Weisung sieht da aber etwas anders aus:
"Do Until Cells(Zeile - 1, "B") > range("B5") * range("B7")"
Noch eine Frage:
Ich gehe immer in zwei Schritten vor (Ausgangspunkt jedesmal Zeile 14).
Dort füge ich über
range("C14").Select
ActiveCell.FormulaR1C1 = Formula4
die Formel ein und erfasse dann einen separaten Code, mit dem die Fortschreibung nach unten stattfindet. Kann man diese beiden codes zu einem verbinden?
Allerbesten Dank für Unterstützung.
Gruß
Ralph
Bild

Betrifft: AW: Problem mit Endlosschleife (@fcs, aber nicht nur)
von: Daniel Eisert

Geschrieben am: 05.01.2007 00:29:52
Hallo
du kennst aber schon den unterschied zwischen GRÖSSER, KLEINER und IST GLEICH
als Zeichen > < =
Wenn "DO LOOP until Wert1 = Wert2" steht, wird die Schleife nur abgebrochen, wenn der Wert genau gleich ist. Da können schon Rundungsfehler sich auswirken. Deswegen als Abbruchbedingung lieber nicht benutzen, es sei denn, es sind eindeutige Werte wie 0 oder LEER.
ansonsten als Abbruchbedingung lieber GROSSER oder KLEINER verwenden.
(das hatte ich dir im ersten Thread aber auch schon geschieben.)
Gruß, Daniel
Bild

Betrifft: AW: Problem mit Endlosschleife (@fcs, aber nicht n
von: proxima05

Geschrieben am: 05.01.2007 11:00:46
Hallo Daniel,
die Formel um die es geht sieht so aus:
=WENN(A14<>"";(1/(1+$B$6/$B$7)^A14);" ")
Wie kann ich die denn in eine Do-Until-Schleife packen, ohne dass sie sich 'festläuft'? Dass es mit "= range("A15") nicht geht, sehe ich ein.
Danke & Gruß
Ralph
Bild

Betrifft: AW: Problem mit Endlosschleife (@fcs, aber nicht n
von: Daniel Eisert

Geschrieben am: 05.01.2007 11:47:46
Hallo
versuche doch bitte mal genau zu beschreiben, wann die Schleife abgebrochen werden soll.
Außderdem musst du berücksichtigen, daß A14 leer sein kann, dann enthält A15 einen Textstring.
Dieser wiederung kann natürlich nie gleich einer berechneten Zahl sein.
Für diesen Fall müsstest du mit einer IF-Abfrage verhindern, daß die Schleife gestartet wird.
Gruß, Daniel
Bild

Betrifft: AW: Problem mit Endlosschleife (@fcs, aber nicht n
von: proxima05

Geschrieben am: 05.01.2007 15:40:58
Hallo Daniel,
an eine IF-formel habe ich auch schon gedacht ...
Wenn A14 leer ist, dann soll auch die Formel in C14
=WENN(A14<>"";(1/(1+$B$6/$B$7)^A14);" ")
nicht ausgeführt werden und einen Leer-String setzen.
Wenn A14 nicht leer ist, dann wird die Formel ausgeführt und über den Code solange in die darunterliegenden Zellen (C15, C16 ...) eingetragen, wie dann A15, A16 nicht leer sind.
Ich habe nochmal eine Tabelle angehängt.
https://www.herber.de/bbs/user/39413.xls
Danke & Gruß
Ralph
Bild

Betrifft: AW: Problem mit Endlosschleife (@fcs, aber nicht n
von: Daniel Eisert

Geschrieben am: 05.01.2007 20:40:40
Hallo
so ganz verstehe ich dein Problem nicht.
Die Abfrage, ob die jeweilige Zelle in Spalte A leer ist, ist ja schon in der Formel drin, also brauchst du daß ja nicht nochmal extra über die Schleife abzufragen.
Ich würde einfach ermitteln, wie weit die Formel eingetragen werden muß und dann per Makro reinschreiben, ohne Schleife und weitere Prüfung.
also daß da
range("C15").FormulaR1C1 = Formula4
Zeile = 16
Do Until Cells(Zeile - 1, "C") = range("A15")
Cells(Zeile, "C").FormulaR1C1 = Formula4
Zeile = Zeile + 1
Loop

würde ich dadurch ersetzen würd ich komplet streichen und dadurch ersetzen:
Range("C14:C" & Range("A65536").end(xlup).row).forumlar1c1 = forumula4

gruß, Daniel
Bild

Betrifft: AW: Problem mit Endlosschleife (@fcs, aber nicht n
von: proxima05
Geschrieben am: 05.01.2007 21:07:25
Daniel,
das mit der Abfrage, inwieweit die Formel eingetragen werden muss, war mir eben nicht bewusst, deswegen auch der Umweg über die Schleifen. Ich habe es jetzt mit Deinem "Einzeiler" versucht und es klappt.
Besten Dank, Gruß
Ralph
Bild

Betrifft: AW: Problem mit Endlosschleife (@fcs, aber nicht n
von: Daniel Eisert

Geschrieben am: 05.01.2007 22:12:39
Hallo
schön das es klappt und Danke für die Rückmeldung.
dann schau doch bitte mal, ob du auch die anderen Schleifen so eleminieren kannst, dann liest und korregiert Luc:-? auch zukünftig deine Makros ;-)
Gruß, Daniel
Bild

Betrifft: AW: Problem mit Endlosschleife (@fcs, aber nicht n
von: Luc:-?

Geschrieben am: 05.01.2007 00:49:57
Hallo Ralph,
das kann nur heißen, dass der Wert in A15 im Moment der Wiederholungsabfrage der Schleife in der zuvor gefüllten Zelle nicht erreicht oder aber bereits überschritten wurde. Vermutlich liegt der Fehler in Formula4.
Gruß Luc :-?
PS: Ansonsten entspricht das Pgm nicht meinem Pgmierstil, weshalb ich mich nicht eingehender damit auseinandersetzen will. ;-)
 Bild
Excel-Beispiele zum Thema "Problem mit Endlosschleife (@fcs, aber nicht nur)"
Verschnittproblem mit Solver lösen