VBA循环函数编译错误:命名参数已指定,求解器约束批量设置求助
VBA 批量设置Solver约束代码问题修正
以下是你代码中的核心问题及修正方案:
错误点梳理
- 参数赋值符号错误:多处把VBA要求的参数赋值符号
:=写错,比如ByChange: ="$AA$" & i多了空格,CellRef:-"$AJ$” & i用减号-代替了:=,这些都会导致语法报错。 - 引号格式错误:
"$AJ$” & i里的右引号是中文全角引号,VBA只识别英文半角引号,必须替换。 - SolverAdd语句语法错误:第一个SolverAdd被错误拆成两行,且重复使用
CellRef参数——当Relation:=1(小于等于)时,第三个参数应该是FormulaRef,用来指定约束值的单元格,同时跨换行需要加下划线_来标识语句未结束。 - 冗余激活操作:
ActiveWorkbook.ActiveSheet.Activate属于多余操作,直接指定具体工作表更稳妥。
修正后的完整代码
Sub MultipleSolver() Dim i As Long ' 替换为你实际使用的工作表名称,比如Sheet1 Sheet1.Activate For i = 6 To 132 SolverReset ' 修正目标单元格、求解类型、可变单元格的参数赋值 SolverOk SetCell:="$AJ$" & i, MaxMinVal:=2, ByChange:="$AA$" & i ' 修正第一个约束:AJ列单元格 <= AK列对应单元格 SolverAdd CellRef:="$AJ$" & i, Relation:=1, FormulaRef:="$AK$" & i ' 修正第二个约束:AA列单元格为整数 SolverAdd CellRef:="$AA$" & i, Relation:=-4, FormulaText:="integer" ' 执行求解,UserFinish:=True表示不弹出结果对话框 SolverSolve UserFinish:=True Next i End Sub
注意事项
运行代码前需确保已启用规划求解加载项:打开Excel选项→加载项→管理「Excel加载项」→转到,勾选「规划求解加载项」。
内容的提问来源于stack exchange,提问作者Daniela Vidal
相关产品推荐
相关产品推荐

