VBA自动化Excel Solver遇异常:循环执行无效果求排查解决
问题排查与修正方案
先看你代码里的几个致命问题:
- 单元格地址拼接错误:你写的
"$U$7" & i会变成$U$71(i=1时),但你要的是下移一行,也就是第7+i行,应该写成"$U$" & (7 + i),所有涉及行号的地方都得这么改,不然Solver找的是错误单元格,自然没效果。 - 多余的End语句:
SolverSolve后面的End会直接终止整个宏,循环只跑一次就停了,根本到不了Next i,必须删掉这个End。 - 固定目标值未动态引用:你写的
ValueOf:=152是固定值,要动态引用单元格的话,得换成对应行的单元格值,比如假设目标值存在X列对应行,就用ValueOf:=Range("$X$" & (7 + i)).Value。 - SolverSolve未静默执行:默认运行
SolverSolve会弹出结果对话框,自动化时会卡住,得加UserFinish:=True参数让它自动完成。
另外要确保Excel已启用Solver的VBA引用:打开VBA编辑器→工具→引用→勾选Solver。
修正后的代码如下:
Sub Macro4() Dim i As Integer ' 循环2000次,可根据需求调整次数 For i = 1 To 2000 SolverReset ' 目标单元格、可变单元格修正为第7+i行 SolverOk SetCell:="$U$" & (7 + i), _ MaxMinVal:=3, _ ValueOf:=Range("$X$" & (7 + i)).Value, ' 替换为你实际存目标值的单元格列 ByChange:="$G$" & (7 + i) & ":$J$" & (7 + i), _ Engine:=1, _ EngineDesc:="GRG Nonlinear" ' 所有约束的单元格地址修正为对应行 SolverAdd CellRef:="$K$" & (7 + i), Relation:=1, FormulaText:="$G$" & (7 + i) SolverAdd CellRef:="$G$" & (7 + i), Relation:=1, FormulaText:="$O$" & (7 + i) SolverAdd CellRef:="$L$" & (7 + i), Relation:=1, FormulaText:="$H$" & (7 + i) SolverAdd CellRef:="$H$" & (7 + i), Relation:=1, FormulaText:="$P$" & (7 + i) SolverAdd CellRef:="$M$" & (7 + i), Relation:=1, FormulaText:="$I$" & (7 + i) SolverAdd CellRef:="$I$" & (7 + i), Relation:=1, FormulaText:="$Q$" & (7 + i) SolverAdd CellRef:="$N$" & (7 + i), Relation:=1, FormulaText:="$J$" & (7 + i) SolverAdd CellRef:="$J$" & (7 + i), Relation:=1, FormulaText:="$R$" & (7 + i) ' 静默执行Solver,不弹出对话框 SolverSolve UserFinish:=True Next i End Sub
注意:把代码里的Range("$X$" & (7 + i)).Value换成你实际存放动态目标值的单元格列(比如目标值在V列,就改成"$V$")。
内容的提问来源于stack exchange,提问作者jakebannana
相关产品推荐
相关产品推荐

