2015-10-07 4 views
0

Я использую Solver с помощью следующего кода:VBA Solver цикл

Sub Test() 

    SolverReset 

    SolverOk SetCell:="$K$7", MaxMinVal:=1, ValueOf:=0, ByChange:="$I$7:$J$7", _ 
    Engine:=1, EngineDesc:="GRG Nonlinear" 

    SolverAdd CellRef:="$G$7", Relation:=2, FormulaText:="$H$7" 
    SolverAdd CellRef:="$K$7", Relation:=2, FormulaText:="$B$7" 

    SolverSolve UserFinish:=False 

    SolverFinish KeepFinal:=1 

End Sub 

теперь мне нужно положить его в петлю, чтобы запустить Solver от строки к строке 7 17. Я закодирован его согласно ниже но он не работает:

Dim i As Long 
For i = 7 To 17 
    SolverReset 

    SolverOk SetCell:="$K$" & i, MaxMinVal:=1, ValueOf:=0, ByChange:="$I$ & i:$J$ & i", _ 
    Engine:=1, EngineDesc:="GRG Nonlinear" 

    SolverAdd CellRef:="$G$" & i, Relation:=2, FormulaText:="$H$" & i 
    SolverAdd CellRef:="$K$" & i, Relation:=2, FormulaText:="$B$" & i 

    SolverSolve UserFinish:=False 

    SolverFinish KeepFinal:=1 

Next i 

End sub 
+0

«не работает» должна быть добавлена ​​к цензуре список ... Можете ли вы объяснить более подробную какой результат вы получение - это ошибка компиляции, исключение времени выполнения или что-то еще? – GSazheniuk

+0

Он работал без цикла, поэтому кажется, что это ошибка компиляции (я не уверен в правильном синтаксисе функции ByChange). – fdt6243

+0

, так что вы пропустили двойные кавычки в этом месте - ByChange: = "$ I $ & i: $ J $ & i", и вы должны использовать ByChange: = "$ I $" & i & ": $ J $ «& i Попробуйте и дайте мне знать, если это проблема. – GSazheniuk

ответ

1

Может быть ...

Dim i    As Long 

For i = 7 To 17 
    SolverReset 

    With Rows(i) 
    SolverOk SetCell:=.Range("K1").Address, _ 
      MaxMinVal:=1, _ 
      ByChange:=.Range("I1:J1").Address, _ 
      Engine:=1 
    SolverAdd CellRef:=.Range("G1").Address, _ 
       Relation:=2, _ 
       FormulaText:=.Range("H1").Address 
    SolverAdd CellRef:=.Range("K1").Address, _ 
       Relation:=2, _ 
       FormulaText:=.Range("B1").Address 
    SolverSolve UserFinish:=True 
    End With 
Next i 
Смежные вопросы