是否可以使用 VBA 让 Excel 的规划求解引用多张工作表中的单元格?

是否可以使用 VBA 让 Excel 的规划求解引用多张工作表中的单元格?

我在其他论坛上看到过这个问题,但我认为这里没有出现过。我希望分配给 Solver 宏的按钮位于与 Solver 的目标和变量不同的工作表中。所有目标和变量都位于同一张工作表中,即按下 Sheet1 中的按钮会导致 Solver 使用 Sheet2 中的值在 Sheet2 中执行。

其他论坛经常声称 Solver 无法引用除活动工作表之外的其他工作表中的单元格,但我希望通过深入研究 VBA 代码来实现这一点。我知道通过在 Sheet1 中镜像 Sheet2 的值,我可以很好地使用 Solver。但是,这不是该程序的选项。

我尝试让 Sheet1 中的按钮调用 Sheet2 中包含的 Solver 宏,但该宏仍然引用 Sheet1 中的单元格,而不是 Sheet2 中的单元格。(这实际上是在 Sheet1 中创建一个按钮来按下 Sheet2 中的按钮)

然后我尝试明确地陈述这些单元格,如下所示:

SolverOk SetCell:=ThisWorkbook.Sheets("Sheet2").Cells(12, 2), MaxMinVal:=2, ValueOf:=0, ByChange:=ThisWorkbook.Sheets("Sheet2").Range("$B$9:$B$10"), _
        Engine:=1, EngineDesc:="GRG Nonlinear"

但我得到:运行时错误'9'下标超出范围。

任何帮助或指导都将不胜感激。我不是高级用户,而是根据任务需要学习 VBA。感谢您的时间。

答案1

我通常使用的一种解决方法是激活要解决的工作表,调用求解器,然后重新激活带有按钮的工作表。操作如下:

Sub solveForValues()

    ' Prevent Excel from updating the screen while switching sheets
    ' This is purely cosmetic
    Application.ScreenUpdating = False

    Dim wkb As Workbook
    Set wkb = ThisWorkbook

    ' Let's call "solver_sheet" your solver data sheet
    wkb.Worksheets("solver_sheet").Activate

    SolverReset
    SolverAdd CellRef:="$X$83", Relation:=2, FormulaText:="100000"
    SolverOk SetCell:="$X$83", MaxMinVal:=1, ValueOf:=0, ByChange:="$AC$1"
    SolverSolve True

    ' The sheet "button_sheet" contains the button 
    ' and references to the result cells from "solver_sheet" sheet
    wkb.Worksheets("button_sheet").Activate

    ' Turning screen updating back ON
    Application.ScreenUpdating = True

    ' Visual confirmation for the button
    MsgBox ("Done!")

End Sub

答案2

知识库

设置单元格可选变量。指活动工作表

相关内容