Ich bin insgesamt newbi en VBA und Solver. Ich habe dieses Makro für Excel gemacht:Löser in VBA mit Schleifen und Bedingungen
Sub Macro4()
'
' Macro4 Macro
' Mas4
'
'
SolverOk SetCell:="$CU$134", MaxMinVal:=3, ValueOf:=1, ByChange:="$BI$3", _
Engine:=1, EngineDesc:="GRG Nonlinear"
SolverOk SetCell:="$CU$134", MaxMinVal:=3, ValueOf:=1, ByChange:="$BI$3", _
Engine:=1, EngineDesc:="GRG Nonlinear"
SolverSolve UserFinish:=True
SolverOk SetCell:="$CV$134", MaxMinVal:=3, ValueOf:=1, ByChange:="$BJ$3", _
Engine:=1, EngineDesc:="GRG Nonlinear"
SolverOk SetCell:="$CV$134", MaxMinVal:=3, ValueOf:=1, ByChange:="$BJ$3", _
Engine:=1, EngineDesc:="GRG Nonlinear"
SolverSolve UserFinish:=True
SolverOk SetCell:="$CW$134", MaxMinVal:=3, ValueOf:=1, ByChange:="$BK$3", _
Engine:=1, EngineDesc:="GRG Nonlinear"
SolverOk SetCell:="$CW$134", MaxMinVal:=3, ValueOf:=1, ByChange:="$BK$3", _
Engine:=1, EngineDesc:="GRG Nonlinear"
SolverSolve UserFinish:=True
SolverOk SetCell:="$CX$134", MaxMinVal:=3, ValueOf:=1, ByChange:="$BL$3", _
Engine:=1, EngineDesc:="GRG Nonlinear"
SolverOk SetCell:="$CX$134", MaxMinVal:=3, ValueOf:=1, ByChange:="$BL$3", _
Engine:=1, EngineDesc:="GRG Nonlinear"
SolverSolve UserFinish:=True
SolverOk SetCell:="$CY$134", MaxMinVal:=3, ValueOf:=1, ByChange:="$BM$3", _
Engine:=1, EngineDesc:="GRG Nonlinear"
SolverOk SetCell:="$CY$134", MaxMinVal:=3, ValueOf:=1, ByChange:="$BM$3", _
Engine:=1, EngineDesc:="GRG Nonlinear"
SolverSolve UserFinish:=True
SolverOk SetCell:="$CZ$134", MaxMinVal:=3, ValueOf:=1, ByChange:="$BN$3", _
Engine:=1, EngineDesc:="GRG Nonlinear"
SolverOk SetCell:="$CZ$134", MaxMinVal:=3, ValueOf:=1, ByChange:="$BN$3", _
Engine:=1, EngineDesc:="GRG Nonlinear"
SolverSolve UserFinish:=True
SolverOk SetCell:="$DA$134", MaxMinVal:=3, ValueOf:=1, ByChange:="$BO$3", _
Engine:=1, EngineDesc:="GRG Nonlinear"
SolverOk SetCell:="$DA$134", MaxMinVal:=3, ValueOf:=1, ByChange:="$BO$3", _
Engine:=1, EngineDesc:="GRG Nonlinear"
SolverSolve UserFinish:=True
Range("BI3:BO3").Select
Selection.Copy
Range("DI134").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub
Es funktioniert ok, aber nur für die Zeile 134. Wenn die Bedingung Q134> 125 trifft, dann muss das Makro ausgeführt werden. Ich muss nach anderen Q-Zeilen suchen, die die Bedingung Q (Anzahl der Zeilen)> 125 erfüllten, dann sollte das Makro ausgeführt werden, aber Zeile 134 für "Anzahl der Zeilen" ändern, die die Bedingung erfüllten. Ich weiß nicht, wie ich diese "Number of Row" an eine Referenz für das Macro weitergeben soll.
Wie Sie sehen werden, muss ich die Solver-Ausgabe jedes Mal speichern, wenn das Makro ausgeführt wird, aber ich weiß nicht, wie es geht. Das ist der Grund warum ich benutzt habe:
Range("DI134").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
im letzten Teil meines Makros.
Vielen Dank im Voraus und Entschuldigung für meine Unerfahrenheit.
'weiß nicht, wie man dieses" numbre of row "übergibt, verwende eine Variable. – findwindow
sieht so aus, als ob Sie SolverOk zweimal für jeden Solver-Lauf verwenden. Man sollte genügen. Ich verwende gerne SolverReset, um sauber zu starten. Sie müssen einen Schritt hinzufügen, um die Lösung jedes Durchgangs zu kopieren. Sie sollten wahrscheinlich eine VBA-Schleife über die Bereiche von OF-Zellen und DV-Zellen verwenden. Sie können die Schleife für die Variable Zeilennummer mit etwas wie diesem tun: 'für i = 134 bis 144' ' wenn Bereich ("Q" & i) .value> 125 dann " ' Aufruf macro4' 'endif ' ' nächste i' – kindoflost
@ E.Tron - bitte überprüfen Sie die Antwort unter [dieser Beitrag] (http://stackoverflow.com/questions/36671991/use-solver-in-vba-with-loop-in-rows) und lassen Sie mich wissen, wenn Sie weitere Fragen haben. – OldUgly