AW: For Next Schleife bricht nach einem Durchgang ab
02.03.2011 10:45:35
Uwe
Guten Tag, Frank,
nach Deiner Hochgeladenen arbeitsmappe steht in der Spalte 22 (Spalte "V") keine Formel. Wenn du die Spalte 10 (Spalte "J") meinst, dann läuft die Schleife und liefert Werte. Die Werte selbst allerdings zeigen, dass da noch irgendetwas von der Programmlogik schief läuft.
Gruß,
Uwe
P.S.
Zur Frage der Zellenadressierung, wenn sie denn mit dem Objekt Range durchgeführt wird:
Range("J" & i).GoalSeek Goal:=delta, ChangingCell:=Range("B" & i)
Cells(i, "J").GoalSeek Goal:=delta, ChangingCell:=Cells(i, "B")
Cells(i, 10).GoalSeek Goal:=delta, ChangingCell:=Cells(i, 10)
Alle drei Version bewirken die gleiche Aktion mit den selben Zellenwerten. Bei der dritten sind die wenigsten internen programmtechnischen Intergretationen erforderlich, daher ist diese bei der Programmierung vorzuziehen.
Zu Referenzierungsangaben auf Elemente (Objekte, Variablen):
Generell und vereinfacht formuliert gilt, dass man auf die übergeordneten Struktur (das Objekt), in der ein Elemtent enthalten ist, durch den Vorsatz des Objektnamensnamens vor dem untergeorneten Objekt-/Elementnamen setzt und beide durch einen Punkt voneinander trennt.
With Cells(i, 4)
esu = .Value
zeta = Cells(i, 10)
.Interior.Color = 5296274
If j = 2 Then GoTo Zeta_überspringen
If zeta > zeta_value Then
.Value = 25
SolverOk SetCell:=Cells(i, 5), MaxMinVal:=3, ValueOf:=zeta_value, ByChange:=. _
Value
SolverSolve UserFinish:=True
delta = delta - 0.01
zeta_value = 0.35
j = j + 1
.Offset(0, 1).Font.Bold = True
End If
Zeta_überspringen:
If esu
Die With-Anweisung bewirkt, dass vor jedem Punkt in diesem Block als Objekt die Zelle in der i-ten Zeile und vierten Spalte zu setzen ist, z.B. eben:
esu = Cells(i, 4).Value
zeta = Cells(i, 10)
Cells(i, 4).Interior.Color = 5296274
If j = 2 Then GoTo Zeta_überspringen
If zeta > zeta_value Then
Cells(i, 4).Value = 25
SolverOk SetCell:=Cells(i, 5), MaxMinVal:=3, ValueOf:=zeta_value, ByChange:= _
Cells(i, 4).Value
SolverSolve UserFinish:=True
delta = delta - 0.01
zeta_value = 0.35
j = j + 1
Cells(i, 4).Offset(0, 1).Font.Bold = True
End If
Zeta_überspringen:
If esu
Die Objektvariable Value wird, wenn nichts anderes bei eienr Zuweisung geschreiben steht vom Interpreter automatisch angefügt.
Die Anweisung:
Cells(i, 4).Offset(0, 1).Font.Bold = True
bezieht sich also auf die Zelle in der gleichen Zeile und fünften Spalte.