我已经在其他论坛上看到过这个问题,但我不认为它已经出现在这里。我希望分配给Solver宏的按钮位于与Solver的目标和变量不同的表中。所有目标和变量都位于同一张工作表中;即,在Sheet1中按下按钮会使Solver使用Sheet2中的值在Sheet2中执行。
其他论坛经常声称,Solver无法引用工作表之外的工作表中的单元格,但是我希望通过深入研究VBA代码来实现。我知道,通过在Sheet1中镜像Sheet2的值,可以很好地使用求解器。但是,这不是该程序的选项。
我试图使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。感谢您的时间。
我通常使用的一种解决方法是激活要求解的工作表,调用求解器,然后重新激活具有按钮的工作表。这样的事情:
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句