您如何编写 VBA 代码以在对象单元格上使用带有边界的求解器?

问题描述

Here 是我引用的 Excel 文件

我在VBA中写了几行代码来运行一个基于以下参数的求解器:通过改变R3的值找到H15的最大值,R3是大于等于C7且小于等于到 C8。 VBA中实际的宏如下

Sub Mmax_A()
'
' Mmax Macro
'

'
    SolverReset
    Range("R3").Value = Range("R3").Value + Range("C5").Value / Range("U14").Value
    SolverOk SetCell:="$H$15",MaxMinVal:=1,ValueOf:=0,ByChange:="$R$3",Engine:=1 _,EngineDesc:="GRG Nonlinear"
    SolverAdd CellRef:=Range("C7"),Relation:=3
    SolverAdd CellRef:=Range("C8"),Relation:=1
    
    SolverSolve userFinish:=True
End Sub

请注意,以 "Range("R3").Value = Range("R3").Value + ...." 开头的行只是让求解器通过计算增量更改 R3 初始值的函数(为了确保求解器不只是不断寻找相同的解决方案,因为它实际上并没有环顾四周)。它不应该影响我遇到的问题(如果事实证明这是问题,我会感到非常愚蠢。

当我在求解器对话框中手动输入这些参数时(我们从 U19:Z19 加载参数),它工作正常,世界一切正常。当我运行上面的宏(分配给覆盖在单元格 Q14 顶部的“Solve(+)”按钮)时,有时我会得到一个超出我在单元格 R3 上设置的限制的解决方案。

当 C8 小于 5 时,这种情况几乎总是发生。随着值增加到值大于 30 时不会发生错误的程度,这种情况发生的频率较低。

我认为这意味着我以某种方式对边界/关系进行了错误的编程。任何帮助或链接表示赞赏。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)