2016-04-26 10 views
-1

Я пытаюсь написать код VBA, который неоднократно решает целевую функцию (ячейки в столбце P) путем изменения (ячейки в столбце H). У меня есть следующие ограничения:Код VBA для решения повторно

Первое ограничение: H_i <= H_i-1, e.g. H3 <= H2 и так далее до последней строки.

Второе ограничение: L_i >= L_i-1, e.g. L3 >= L2 и т. Д. До последнего ряда.

код до сих пор:

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 

Моя ценность в H2 является начальное значение 0.931 (заданное значение). По какой-то причине мой код отвечает значениям 0.53 в H3, где я ожидал найти значение, намного ближе к 0.93. Кроме того, моя целевая функция вычисляется на основе физических отношений, в которых значение 0.53 находится ниже нижней границы.

Может ли кто-нибудь сказать мне, если код, который я использую, верен? Любая помощь приветствуется!

ответ

1

После выполнения некоторых корректировок мне удается решить мою проблему.

Настоящим код:

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

Получение ссылки ячейки информации решителю сложно. Существует ряд других проблем ... [см. Ответ на этот вопрос] (http://stackoverflow.com/questions/36671991/use-solver-in-vba-with-loop-in-rows/36682703) – OldUgly