【问题标题】:Sheets().Select/Solver VBA not workingSheets().Select/Solver VBA 不工作
【发布时间】:2014-07-13 23:23:13
【问题描述】:

我的工作簿有三张工作表,其中一张的名字是“数据”。

为什么 .select 方法不起作用? 代码运行良好,没有给出错误,但从不选择/转到“数据”表...

Private Sub CommandButton1_Click()

Dim solverAvailable As Boolean
solverAvailable = CheckSolver()

Sheets("Data").Select
If solverAvailable = True Then

    SolverReset
    SolverOk SetCell:="$D$56", MaxMinVal:=2, ValueOf:=0, ByChange:="$C$12:$C$13", _
        Engine:=1, EngineDesc:="GRG Nonlinear"
    SolverSolve True

    SolverReset
    SolverOk SetCell:="$H$56", MaxMinVal:=2, ValueOf:=0, ByChange:="$D$12:$D$13", _
        Engine:=1, EngineDesc:="GRG Nonlinear"
    SolverSolve True

    SolverReset
    SolverOk SetCell:="$M$56", MaxMinVal:=2, ValueOf:=0, ByChange:="$E$12:$E$13", _
        Engine:=1, EngineDesc:="GRG Nonlinear"
    SolverSolve True

    SolverReset
    SolverOk SetCell:="$F$77", MaxMinVal:=2, ValueOf:=0, ByChange:="$C$14:$C$15", _
        Engine:=1, EngineDesc:="GRG Nonlinear"
    SolverSolve True

    SolverReset
    SolverOk SetCell:="$L$77", MaxMinVal:=2, ValueOf:=0, ByChange:="$D$14:$D$15", _
        Engine:=1, EngineDesc:="GRG Nonlinear"
    SolverSolve True

    SolverReset
    SolverOk SetCell:="$S$77", MaxMinVal:=2, ValueOf:=0, ByChange:="$E$14:$E$15", _
        Engine:=1, EngineDesc:="GRG Nonlinear"
    SolverSolve True

    SolverReset
    SolverOk SetCell:="$D$133", MaxMinVal:=2, ValueOf:=0, ByChange:="$C$83:$C$84", _
        Engine:=1, EngineDesc:="GRG Nonlinear"
    SolverSolve True

    SolverReset
    SolverOk SetCell:="$H$133", MaxMinVal:=2, ValueOf:=0, ByChange:="$D$83:$D$84", _
        Engine:=1, EngineDesc:="GRG Nonlinear"
    SolverSolve True

    SolverReset
    SolverOk SetCell:="$M$133", MaxMinVal:=2, ValueOf:=0, ByChange:="$E$83:$E$84", _
        Engine:=1, EngineDesc:="GRG Nonlinear"
    SolverSolve True

    SolverReset
    SolverOk SetCell:="$F$157", MaxMinVal:=2, ValueOf:=0, ByChange:="$C$85:$C$86", _
        Engine:=1, EngineDesc:="GRG Nonlinear"
    SolverSolve True

    SolverReset
    SolverOk SetCell:="$L$157", MaxMinVal:=2, ValueOf:=0, ByChange:="$D$85:$D$86", _
        Engine:=1, EngineDesc:="GRG Nonlinear"
    SolverSolve True

    SolverReset
    SolverOk SetCell:="$S$157", MaxMinVal:=2, ValueOf:=0, ByChange:="$E$85:$E$86", _
        Engine:=1, EngineDesc:="GRG Nonlinear"
    SolverSolve True

    SolverReset
    SolverOk SetCell:="$D$209", MaxMinVal:=2, ValueOf:=0, ByChange:="$C$163:$C$164" _
        , Engine:=1, EngineDesc:="GRG Nonlinear"
    SolverSolve True

    SolverReset
    SolverOk SetCell:="$H$209", MaxMinVal:=2, ValueOf:=0, ByChange:="$D$163:$D$164" _
        , Engine:=1, EngineDesc:="GRG Nonlinear"
    SolverSolve True

    SolverReset
    SolverOk SetCell:="$M$209", MaxMinVal:=2, ValueOf:=0, ByChange:="$E$163:$E$164" _
        , Engine:=1, EngineDesc:="GRG Nonlinear"
    SolverSolve True

    SolverReset
    SolverOk SetCell:="$F$231", MaxMinVal:=2, ValueOf:=0, ByChange:="$C$165:$C$166" _
        , Engine:=1, EngineDesc:="GRG Nonlinear"
    SolverSolve True

    SolverReset
    SolverOk SetCell:="$L$231", MaxMinVal:=2, ValueOf:=0, ByChange:="$D$165:$D$166" _
        , Engine:=1, EngineDesc:="GRG Nonlinear"
    SolverSolve True

    SolverReset
    SolverOk SetCell:="$S$231", MaxMinVal:=2, ValueOf:=0, ByChange:="$E$165:$E$166" _
        , Engine:=1, EngineDesc:="GRG Nonlinear"
    SolverSolve True
End If

Beep
End Sub

我实际上希望工作表选择位于 if 内,但如果它在其中,则会出现“9”错误:subscript out of range!

理想情况下,我什至不想选择工作表 - 我想引用 Sheets("Data").Range(whatever),但这也会产生 subscript out of range 错误。

【问题讨论】:

  • 试试ThisWorkbook.Sheets("Data")....
  • 我试过了,没有任何区别。这是原始文件,如果你想看看db.tt/2eaD8n4v
  • @Mierzen 在 Excel 2007 中,在各种 Solver 语句中删除对 Engine 的引用后,它运行良好并选择了数据表。您得到下标超出范围错误的事实通常意味着 VBA 没有找到“数据”工作表。如果您尝试使用相同的语法从即时窗口中选择它或引用一个范围会发生什么?
  • 我不知道引擎引用是做什么的,我是从宏记录器中得到的。不幸的是,我的自动提款机上没有我的电脑,所以我现在无法查看。我不知道为什么它找不到那张纸,它肯定在那里。 Sheets(3) 也给出了下标错误
  • @Mierzen 引擎引用是在 2010 年添加的。它与 Solver 使用的方法有关,不应影响事物。但是,当您的工作簿在我的机器上运行时,选择 sheet("data") 或 Sheets(3) 都没有问题。当你有你的电脑时,看看在即时窗口中会发生什么。此外,在您运行宏时检查以确保正确的工作簿是“ThisWorkbook”。如果另一个工作簿处于活动状态,您可能需要按名称引用该工作簿。

标签: vba excel solver ms-solver-foundation


【解决方案1】:

解决了!

我删除了CheckSolver() 函数并调用(我从http://peltiertech.com/Excel/SolverVBA.html 得到它),现在它可以完美运行了!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    相关资源
    最近更新 更多