2015-10-07 65 views
0

我使用求解用下面的代码:VBA求解循环

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 

我现在需要把它变成一个循环,以便从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 $ “&我试着让我知道这是否是一个问题。 – 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