ich bin gerade dabei eine Do Loop Schleife zu dynamisieren. Kurze Erklärung dazu:
Die Schleife soll in Spalte I ab Reihe O + i schauen, ob sich ein Wert in den Zellen befindet. Befindet sich ein Wert in einer Zelle, soll in dieser Reihe der Wert in Spalte AW mittels Solver minimiert werden. Dabei darf der Solver die Gewichte verändern (Spalten AP, AR und AT). Nebenbedingungen sind, dass die Werte in den Spalten AQ, AS und AU gleich groß sein sollen (also jeweils 1/3) Die Summe aus den drei Werten muss somit 1 ergeben (Spalte AV). Die Schleife soll so lange durchgeführt werden, bis in Spalte A keine Werte mehr in den Zellen stehen.
Der Code läuft ganz durch, bringt aber folgende Fehlermeldung:
Fehler im Modell: Überprüfen Sie, ob alle Zellen und Nebenbedingungen gültig sind. Vielleicht sind einige Zellen, die keine Variablenzellen darstellen, als Integer, Binary oder AllDifferent markiert.
Schreibe ich den Code für eine einzelne Zelle um funktioniert er. Somit dürften die Nebenbedingungen kein Problem sein. Die einzigen Variablen, die ich als Integer markiert habe sind O und i. Diese stellen die Reihenzahl da, welche nur ganzzahlig sein können. Deshalb glaube ich, dass dies eigentlich auch nicht das Problem ist.
Die Beispieltabelle soll nur einmal zeigen, wie die eigentlichen Tabellen aufgebaut sind. Der _
Code soll für mehrere Mappen angewendet werden, weshalb ich diesen gerne dynamisch hätte.
Sub DoLoop1_1_Erweitert() Dim i As Integer Dim O As Integer i = i + 1 O = Cells(6, 13) Do If Cells(O + i, 9) = "" Then i = i + 1 ElseIf Cells(O + i, 9) 0 Then SolverReset SolverOk SetCell:="$AW$ O + i", MaxMinVal:=2, ValueOf:=0, ByChange:= _ "$AP$ O + i,$AR$ O + i,$AT$ O + i", Engine:=1, EngineDesc:="GRG Nonlinear" SolverAdd CellRef:="$AQ$ O + i", Relation:=2, FormulaText:="$AS$ O + i" SolverAdd CellRef:="$AQ$ O + i", Relation:=2, FormulaText:="$AU$ O + i" SolverAdd CellRef:="$AS$ O + i", Relation:=2, FormulaText:="$AU$ O + i" SolverAdd CellRef:="$AV$ O + i", Relation:=2, FormulaText:="1" SolverOk SetCell:="$AW$ O + i", MaxMinVal:=2, ValueOf:=0, ByChange:= _ "$AP$ O + i,$AR$ O + i,$AT$ O + i", Engine:=1, EngineDesc:="GRG Nonlinear" SolverOk SetCell:="$AW$ O + i", MaxMinVal:=2, ValueOf:=0, ByChange:= _ "$AP$ O + i,$AR$ O + i,$AT$ O + i", Engine:=1, EngineDesc:="GRG Nonlinear" SolverSolve 'userfinish:=True i = i + 1 End If Loop While Cells(O + i, 1) "" End Sub
Link zur Beispielmappe: https:\/\/www.herber.de/bbs/user/137431.xlsx
Hat jemand von euch eine Idee, was ich falsch gemacht habe oder ändern könnte?
Vielen Dank schon einmal für eure Hilfe! :)