excel - 如何在 VBA 中自动化求解器
问题描述
我知道这个问题已经被问过一百万次了,但是在梳理了解决方案之后,我仍然在努力让它发挥作用。
我试图通过更改从第 9 行开始的 0<I:K>1 约束的 I 到 K 列中的变量来最大化 M 列中的值。我需要对 330 行重复此操作。我使用 10 作为代码在多行上工作的证明,并在我验证后将其扩展。
它似乎在多行上重复,但语法中的某些内容会导致模型出错。
我得到的错误信息:
模型错误。请验证变量和约束是否有效。也许一些不是可变单元格的单元格被标记为整数、二进制或完全不同。
我对 VBA 基本上一无所知,所以请把它简化并帮助我理解代码更正的语法和格式。谢谢,
Sub Macro2()
Dim i As Integer
For i = 0 To 10
Sheets("Error").Select
SolverReset
SolverAdd CellRef:="$I:$K" & i, Relation:=1, FormulaText:="1"
SolverAdd CellRef:="$I:$K" & i, Relation:=3, FormulaText:="0"
SolverOk SetCell:="$M" & i, MaxMinVal:=1, ValueOf:=0, ByChange:="$I:K" & i, _
Engine:=3, EngineDesc:="Evolutionary"
SolverOk SetCell:="$M" & i, MaxMinVal:=1, ValueOf:=0, ByChange:="$I:$K" & i, _
Engine:=3, EngineDesc:="Evolutionary"
SolverSolve UserFinish = True
Next i
End Sub
解决方案
可能是这样的。
Sub Macro1()
Dim i As Integer
For i = 1 To 10
SolverOk SetCell:="$A$1", MaxMinVal:=3, ValueOf:=60, ByChange:="$A$" & i & ":$D$" & i, _
Engine:=1, EngineDesc:="GRG Nonlinear"
SolverOk SetCell:="$A$1", MaxMinVal:=3, ValueOf:=60, ByChange:="$A$" & i & ":$D$" & i, _
Engine:=1, EngineDesc:="GRG Nonlinear"
SolverSolve
Next i
End Sub
不要忘记设置对 Solver 的引用。
在 VBA 编辑器中...转到 Tools --> References --> 并选择 Solver。单击确定。
推荐阅读
- sql - 将列更新为虚拟列 oracle
- postgresql - Micronaut:使用 Flyway 在 micronaut-postgres-reactive 上运行数据库迁移(基于 reactive-pg-client)
- vba - MS Word 2016:使用 VBA 删除所有受保护的评论
- mysql - MySQL将时间转换为字符串(Grafana)
- python - 在桌面应用程序中正确集成 wsgiref.simple_server 和 Flask
- java - 如何在两个相同大小的集合中进行操作
- python - PYTHON:每个 x 值的多个 y 值的最佳拟合线
- sql - Microsoft Access:为每个公司选择一个电子邮件地址
- directions - Azure Maps Directions Service 对自行车的错误请求
- javascript - 从 URL 保存 HTML 数据