【问题标题】:Excel Solver function run in a column with input variablesExcel Solver 函数在具有输入变量的列中运行
【发布时间】:2016-04-15 11:44:06
【问题描述】:
Function Obj_Fnc_Colmn(IN1 As Range, OP1 As Range)
Application.Run "Solver.xlam!Auto_Open"
SolverReset
X_var = IN1.Address
Y_var = OP1.Address
MsgBox X_var
SolverOK SetCell:=Y_var, MaxMinVal:=3, ValueOf:="0", ByChange:=X_var
SolverAdd CellRef:=X_var, Relation:=3, FormulaText:="0"

SolverSolve UserFinish:=False
End Function

程序的目的是输入不同的目标集,在多列中更改变量。

请查看我的代码。不断产生错误。同一程序希望用于多个列。

【问题讨论】:

  • 我相信问题出在Solver.xlam!Auto_Open。如果您想确保 Solver 加载项已启用并可从 VBA 访问,请使用此处的代码:Preparing Solver for first use。 HTH
  • 我已经尝试了您的建议,但没有奏效。有什么选择吗?
  • 哪里坏了?尝试注释掉该行,看看会发生什么。
  • 当我们直接使用setcell的“H17”和BChange的“H12”这样的地址时,程序运行没有问题。但是,如果我们通过函数调用获取输入,则会产生错误。 “求解器:发生意外的内部错误,或可用内存已用完”
  • Excel 不允许用户定义的函数更改单元格、工作表或工作簿属性。您需要使用 Sub 或更改事件来执行此操作。

标签: automation solver


【解决方案1】:

基于this,我将使用以下子程序(我确实对其进行了测试,是的,即使没有 Application.Run 行它也可以工作)...

Option Explicit
Sub Obj_Fnc_Colmn()
Dim IN1 As Range, OP1 As Range
Dim X_Var As String, Y_Var As String

    Set IN1 = Sheets("Sheet1").Cells(2, 4)
    Set OP1 = Sheets("Sheet1").Cells(2, 5)

    X_Var = Split(IN1.Address(external:=True), "[")(0) & Split(IN1.Address(external:=True), "]")(1)
    Y_Var = Split(OP1.Address(external:=True), "[")(0) & Split(OP1.Address(external:=True), "]")(1)

    SolverOK SetCell:=Y_Var, MaxMinVal:=3, ValueOf:=0, ByChange:=X_Var, Engine:=1
    SolverAdd CellRef:=X_Var, Relation:=3, FormulaText:=0
    SolverSolve UserFinish:=True

End Sub

注意事项:它不使用 SolverReset。用于 SetCell、ByChange 和 CellRef 的字符串包含工作表引用(并非绝对必要,但有助于避免麻烦)。 ValueOf 和 FormulaText 不是文本,而是数字。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多