首页 > 解决方案 > 如何在 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

Excel 格式

标签: excelvbasolverexcel-solver

解决方案


可能是这样的。

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。单击确定。


推荐阅读