能否通过VBA函数定义SolverOk目标函数?尝试失败求助
Excel Solver能否通过VBA函数直接指定目标函数?
核心结论
Excel Solver的SolverOk方法不支持直接通过VBA函数名指定目标函数,它仅接受工作表单元格引用(通过SetCell参数)作为目标计算的载体。你尝试的SetCell:=("MyFunction")写法无效,因为SetCell要求传入Range对象,而非VBA函数名称。
可行替代方案
如果要使用自定义VBA函数作为Solver的目标逻辑,需要通过工作表单元格间接调用函数,步骤如下:
- 在工作表的任意空白单元格(例如
B8)中输入公式,调用你的VBA函数:
注:确保=MyFunction()MyFunction是标准模块中定义的公共函数,可在工作表单元格中直接调用。 - 在
SolverOk中指定该单元格作为目标:
这样Solver会通过单元格的公式间接获取VBA函数的计算结果,以此作为目标值进行优化调整。SolverOk SetCell:=Range("B8"), MaxMinVal:=3, ValueOf:=10000
关键注意事项
- 若VBA函数依赖Solver的可变单元格,需确保函数参数与这些单元格关联,这样当Solver调整可变单元格时,函数结果会自动更新。
- 自定义函数需保证计算逻辑可被Solver识别(避免使用不稳定或非确定性的逻辑,如随机数生成),否则可能导致Solver无法收敛。
内容的提问来源于stack exchange,提问作者Pierre.Godot
相关产品推荐
相关产品推荐

