考虑以下VBA(无论最新版本是什么)子例程:
Private Sub Worksheet_Change(ByVal Target As Range)
'If Not Application.Intersect(Range("H11:H13"), Range(Target.Address)) Is Nothing Then
Call ThisWorkbook.testEIRR
'End If
End Sub
现在,如果未注释掉注释行,则更改单元格H11的内容将做正确的事情(]更新由某些函数计算出的值,并将其存储在应有的位置)。但是,在条件被注释掉的情况下(如上所述),我出现了堆栈溢出(o,具有讽刺意味的!)
有什么想法要解决吗?
答案 0 :(得分:4)
由于Worksheet_Change
调用Worksheet_Change
并调用Worksheet_Change
等等,导致堆栈溢出
您需要先禁用事件,然后再调用函数。
考虑
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Range("H11:H13"), Range(Target.Address)) Is Nothing Then
Application.EnableEvents = False
Call ThisWorkbook.testEIRR
Application.EnableEvents = True
End If
End Sub
参见this answer,了解类似问题。