VBA堆栈溢出

时间:2019-11-12 17:54:47

标签: excel vba

考虑以下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,具有讽刺意味的!)

有什么想法要解决吗?

1 个答案:

答案 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,了解类似问题。