Цикл решения 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

person fdt6243    schedule 07.10.2015    source источник
comment
Не работает, следует добавить в список цензурированных... Можете ли вы объяснить подробнее, какой результат вы получаете - это ошибка компиляции, исключение времени выполнения или что-то еще?   -  person GSazheniuk    schedule 07.10.2015
comment
Он работал без цикла, поэтому, похоже, это ошибка компиляции (я не уверен в правильном синтаксисе функции ByChange).   -  person fdt6243    schedule 07.10.2015
comment
вот и все, вы пропустили двойные кавычки в этом месте - ByChange:=$I$ & i:$J$ & i и вы должны использовать ByChange:=$I$ & i & :$J$ & i Попробуйте и позвольте мне знать, если это было проблемой.   -  person GSazheniuk    schedule 07.10.2015
comment
В этом была проблема, с вашим синтаксисом (ByChange:=$I$ & i & :$J$ & i) все работает нормально   -  person fdt6243    schedule 07.10.2015
comment
Отличные новости! Рад помочь вам :)   -  person GSazheniuk    schedule 07.10.2015


Ответы (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
person shg    schedule 07.10.2015