2016-04-26 12 views
-1

Ich versuche, VBA-Code zu schreiben, der wiederholt eine Zielfunktion (Zellen in Spalte P) durch Ändern (Zellen in Spalte H) löst. Hiermit habe ich die folgenden Einschränkungen:VBA-Code wiederholt zu lösen

Erste Einschränkung: H_i <= H_i-1, e.g. H3 <= H2 und so weiter bis zur letzten Zeile.

Zweite Einschränkung: L_i >= L_i-1, e.g. L3 >= L2 und so weiter bis zur letzten Zeile.

Der Code bisher:

Sub Solver_Balances() 
'Automated solver to calculate the mass and heat balance 
'at each time increment of 1 sec as given by the datalogger 
' 
Worksheets("Sheet1").Activate 
RowCount = 2 
Do While Not IsEmpty(Worksheets("Sheet1").Range("H" & RowCount)) 
    SolverReset 
    SolverOk SetCell:=Range("P" & RowCount), MaxMinVal:=2, _ 
     ByChange:=Range("H" & RowCount), Engine:=1, _ 
     EngineDesc:="GRG Nonlinear" 
    SolverAdd Cellref:=Range("H" & RowCount), _ 
     Relation:=1, _ 
     FormulaText:=Range("H" & RowCount - 1) 
    SolverAdd Cellref:=Range("L" & RowCount), _ 
     Relation:=3, _ 
     FormulaText:=Range("L" & RowCount - 1) 
    Solversolve userfinish:=True 
    SolverFinish keepFinal:=1 
    RowCount = RowCount + 1 
Loop 
End Sub 

Mein Wert in H2 einen Startwert von 0.931 ist (ein gegebener Wert). Aus irgendeinem Grund antwortet mein Code einen Wert von 0.53 in H3, wo ich erwartet, einen Wert viel näher zu zu finden. Darüber hinaus wird meine Zielfunktion auf der Basis von physikalischen Beziehungen berechnet, in denen der Wert 0.53 unterhalb einer unteren Grenze liegt.

Kann mir jemand sagen, ob der Code, den ich verwende, korrekt ist? Jede Hilfe wird geschätzt!

Antwort

1

Nach ein paar Anpassungen schaffe ich es, mein Problem zu lösen.

Dabei wird der Code:

Sub Solver_Balances() 
'Automated solver to calculate the mass and heat balance 
'at each time increment of 1 sec as given by the datalogger 
' 
Worksheets("Sheet1").Activate 
RowCount = 2 
Do While Not IsEmpty(Worksheets("Sheet1").Range("H" & RowCount)) 
    SolverReset 
    SolverOk SetCell:="P" & RowCount, MaxMinVal:=2, ValueOf:=0, _ 
     ByChange:="H" & RowCount, Engine:=1, _ 
     EngineDesc:="GRG Nonlinear" 
    SolverAdd CellRef:="H" & RowCount, _ 
     Relation:=1, _ 
     FormulaText:="H" & RowCount - 1 
    SolverAdd CellRef:="L" & RowCount, _ 
     Relation:=3, _ 
     FormulaText:="L" & RowCount - 1 
    SolverSolve userfinish:=True 
    SolverFinish keepFinal:=1 
    RowCount = RowCount + 1 
Loop 
End Sub 
+0

Abrufen der Zelle Referenzinformationen zu Solver ist schwierig. Es gibt eine Reihe anderer Herausforderungen ... [siehe die Antwort auf diese Frage] (http://stackoverflow.com/questions/36671991/use-solver-in-vba-with-loop-in-rows/36682703) – OldUgly