“超出堆栈空间”错误由简单的Worksheet_Calculate触发

基本上我要做的是在工作表打开时logging特定单元格的值(在本例中为B26 ),然后如果B26的值发生更改,则将B26的值复制到单元格B25

Module1我有以下代码:

 Public PrevVal As Variant 

ThisWorkbook我有以下代码:

 Private Sub Workbook_Open() PrevVal = Sheet13.Range("B26").Value End Sub 

Sheet13我有以下代码:

 Private Sub Worksheet_Calculate() Application.ScreenUpdating = False If Range("B26").Value <> PrevVal Then Range("B25").Value = Range("B26").Value PrevVal = Range("B26").Value End If End Sub 

奇怪的是,这段代码似乎工作正常,然后开始给我一个“Out of Stack Space”错误,似乎是出现了蓝色(错误发生在If Range("B26").Value <> PrevVal Then码。

如果有帮助,单元格B26是基于另一个单元格的值返回“低”,“中等”或“高”的公式。 这是公式:

 =IF('Source Data'!$C$53=0,"low",IF(AND('Source Data'!$C$53>0,'Source Data'!$C$53<3),"moderate",IF('Source Data'!$C$53>2,"high","N/A"))) 

任何想法,为什么我突然得到这个错误?

PreVail范围更新时,你的代码会自动调用一个连续的循环,你可以通过禁用Events来closures代码循环(所以Calculate事件只运行一次,包括任何更新,如果PrevVal不同于B26)

有关“堆栈空间不足”错误的一般信息,请参阅此MSFT链接 。

好问题!

 Private Sub Worksheet_Calculate() Application.ScreenUpdating = False If Range("B26").Value <> PrevVal Then Application.EnableEvents = False Range("B25").Value = Range("B26").Value PrevVal = Range("B26").Value Application.EnableEvents = True End If End Sub