Ich brauche Solver in einem Blatt ("Sheet1") für verschiedene Werte eines Parameters namens "Luft", dieser Parameter ist nicht Teil der Parameter von Solver, aber es hat einen Einfluss auf die Ergebnisse, also erstelle ich eine Tabelle in "Sheet2" mit verschiedenen Werten von "air" und habe einen Code erstellt, um Solver für jeden "air" -Wert auszuführen, um einige Ergebnisse von Sheet1 "wiederherzustellen" und sie einzufügen die gleiche Tabelle in "Tabelle2"Aufruf von Excel-Solver von einem anderen Sub gibt andere Ergebnisse als manuell
Dies ist der Code, den ich für "Tabelle2" made
Sub F1()
Dim air() As Variant
air = Selection.Value 'Selection of different % of "air" from a table in Sheet2
i = UBound(air, 1) 'Length of air array
For j = 1 To i
Sheet1.Range("$H$35").Value = air(j, 1) 'Change parameter "air" of Sheet1
Call Sheet1.Resolver 'Run Solver on Sheet1 to obtain new results
ActiveCell.Offset(j - 1, 1).Value = Sheet1.Range("$P$132").Value 'Paste new result "$P$132" from Sheet1 on a cell one space right to "air" in table from Sheet2
ActiveCell.Offset(j - 1, 2).Value = Sheet1.Range("$A$54").Value 'Paste new result "$A$54" from Sheet1 on a cell two spaces right to "air" in table from Sheet2
ActiveCell.Offset(j - 1, 3).Value = Sheet1.Range("$P$117").Value 'Paste new result "$P$117" from Sheet1 on a cell three spaces right to "air" in table from Sheet2
Next j
End Sub
Und das ist die Unter Resolver von Sheet1:
Dieser Code funktioniert, aber ich bekomme falsche Werte, wenn ich sie mit Ergebnissen vergleichen, die manuell mit dem Sub Resolver erhalten werden. Zum Beispiel:
den ersten Code verwenden:
air x y z
0,10 56,52 35,08 7.093,49
0,20 56,52 35,08 5.716,48
0,30 56,52 35,08 4.787,19
0,35 56,52 35,08 4.427,32
den zweiten Code manuell:
air x y z
0,10 74,29 57,79 9.324,50
0,20 67,19 48,13 6.796,69
0,30 60,08 39,43 5.089,14
0,35 56,52 35,08 4.427,32
auf den Ergebnissen aus dem ersten Code nur die letzte Zeile in Ordnung ist, denn bevor F1 läuft Ich führe Resolver manuell mit einem Wert von 0,35 von "Luft". Wenn ich die Reihenfolge der "Luft" -Werte ändere, sind sie gleich, nur 0,35 Zeilen sind in Ordnung.
Dann erkannte ich, dass in "Sheet2" nach dem Ausführen von F1 die Werte der Zellen $ A $ 51, $ H $ 36: $ H $ 38, $ A $ 54, $ A $ 45, $ A $ 47, $ A $ 49 (das gleiche verwendet in Resolver) sind 0, so jetzt denke ich, dass das Problem ist, dass Resolver auf "Sheet2" statt "Sheet1" läuft. Also habe ich folgendes versucht:
Sub Resolver()
SolverReset
SolverOk SetCell:=Sheet1.Range("$A$51"), MaxMinVal:=3, ValueOf:="0", ByChange:=Sheet1.Range("$H$36:$H$38,$A$54"), Engine:=1
SolverAdd CellRef:=Sheet1.Range("$A$45"), Relation:=2, FormulaText:=0
SolverAdd CellRef:=Sheet1.Range("$A$47"), Relation:=2, FormulaText:=0
SolverAdd CellRef:=Sheet1.Range("$A$49"), Relation:=2, FormulaText:=0
SolverOptions AssumeNonNeg:=False
SolverSolve UserFinish:=True
SolverFinish KeepFinal:=1
End Sub
Aber funktioniert nicht, wie kann ich "Resolver" in "Sheet1" ausführen? Vielen Dank!
Interessant, dass nur die letzte korrekt ist. Ändern Sie die Reihenfolge der Elemente von "Luft" und führen Sie sie aus, um zu sehen, ob der letzte korrekt ist und 0,35 nicht. Wenn dies der Fall ist, führen Sie die F1-Unterroutine Schritt für Schritt mit der Taste F8 aus und prüfen Sie, ob sich die gewünschten Werte ändern. Der Resolve-Code ist in Ordnung, aber wahrscheinlich wird nur die SolverSolve-Zeile benötigt (müssen Sie wirklich jedes Mal zurücksetzen?). – kindoflost
Hallo, danke für die Eingabe, ich ändere die Reihenfolge oder Luft Element und erkannte, dass die Zeile 0,35 ist ok, denn vor dem Lauf F1 ich Resolver manuell mit einem Wert 0,35 von Luft laufen. Ich erkannte auch, dass der Resolver auf "Sheet2" statt "Sheet1" läuft. Ich benutze SolverReset, weil, wenn nicht die Einschränkungen zu wiederholen beginnen. – nicolasgr