【问题标题】:Excel crashing when a value is set for a range为范围设置值时 Excel 崩溃
【发布时间】:2016-10-31 09:19:20
【问题描述】:

我正在尝试根据条件在 Excel VBA 中设置一个值,但每次都会崩溃并出现与堆栈空间相关的错误,并且当我尝试按照另一篇 SO 帖子中的建议在工作簿上设置 ForceFullCalculation 时,出现错误我得到的是:

Run-time error '-2147417848 (80010108)':

Method 'Value' of object 'Range' failed

有问题的代码行

If Range("G4") = "Yes" Then

    Range("K4:L6").Interior.ColorIndex = 4 ' green
    Range("K4").Value = "x"

End If

代码中有多个这样的块。 当我注释掉设置值“x”的行时,代码似乎运行良好。

If Range("G4") = "Yes" Then

    Range("K4:L6").Interior.ColorIndex = 4 ' green
    'Range("K4").Value = "x"

End If

为什么在将单元格着色为绿色(或任何颜色)后将单个单元格设置为值“x”时会崩溃? 使用的版本是 Excel 2010 32 位,在具有 8GB RAM 的机器上。

【问题讨论】:

  • 您是否在像Worksheet_Change 这样的活动中这样做?通常堆栈空间错误是由递归引起的。
  • 是的,它在 WorkSheet_Change 中。你能推荐一种不同的方式来阻止它崩溃吗?我不确定你提到的递归发生在哪里,我对 Excel VBA 有点陌生。
  • 那么您需要在更改单元格之前添加Application.Enableevents = False(这将再次触发您的事件,等等),然后重置为True。

标签: excel excel-2010 vba


【解决方案1】:

通常,堆栈空间错误是由递归引起的,例如当您从 Worksheet_Change 事件中更改单元格时,该事件随后会调用自身,再次更改单元格,然后再次调用事件等等。为避免这种情况,您可以在进行更改之前禁用事件,方法是添加:

Application.Enableevents = False ' disable event processing

' your code that makes the changes here

Application.Enableevents = True ' reset events again

【讨论】:

  • 有没有一种简单的方法来判断哪些 Excel VBA 函数是递归的?这确实有助于避免或至少识别将来阅读本文的任何人发生的类似问题。
  • 只有逻辑。它们都不是本质上递归的,但如果您从Change 事件中更改 单元格,或在SelectionChange 事件中选择 单元格,则从逻辑上讲,您将触发该事件再次。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多