【问题标题】:GoalSeek Method of Range class failedRange 类的 GoalSeek 方法失败
【发布时间】:2016-09-29 05:33:32
【问题描述】:

我正在尝试使用一个宏来实现 GoalSeek 方法,只要工作表有任何更改,该宏就会自动运行。代码很简单,但收到此错误消息,我不知道如何解决。代码是:

Private Sub Worksheet_Calculate()
   CheckGoalSeek
End Sub

Private Sub CheckGoalSeek()
Dim wb As Workbook
Dim ws As Worksheet

Set wb = ActiveWorkbook
Set ws = wb.Sheets("MAIN")

   ws.Range("N45").GoalSeek Goal:=0, ChangingCell:=ws.Range("D49")

End Sub

其中“N45”是基于公式的单元格,“D49”是一个值。我收到运行时错误消息“Range 类的 GoalSeek 方法失败”。

感谢任何帮助。

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    因为GoalSeek 将强制进行工作表计算,所以它将触发Worksheet_Calculate 事件,该事件将调用CheckGoalSeek,该CheckGoalSeek 将执行GoalSeek,这将强制进行工作表计算,这将触发@ 987654325@ 事件,它将调用CheckGoalSeek,它将执行GoalSeek,这将强制工作表计算,这将......

    为避免这种循环流程,您需要禁用事件处理。

    将您的 Worksheet_Calculate 函数更改为:

    Private Sub Worksheet_Calculate()
        Application.EnableEvents = False
        CheckGoalSeek
        Application.EnableEvents = True
    End Sub
    

    免责声明:我第一次尝试此操作时,它锁定了我的 Excel 副本。我第二次尝试了它。

    【讨论】:

    • 这成功了!但现在又出现了一个新问题。即使 Excel 计算选项设置为自动,我也必须单击“立即计算”按钮才能使事情正常进行。有没有我可以包含的命令来避免这种情况?
    • @Amitava - 该代码不应干扰自动计算。它很高兴地在我的测试工作簿中自动计算。 (我刚刚在 N45 中输入了一个简单的公式 =D49-1,并通过在 D49 中输入新值来使用它 - 并且宏不断将 D49 改回 1。)
    猜你喜欢
    • 2013-05-17
    • 1970-01-01
    • 2014-11-10
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多