为什么我遇到堆栈溢出错误

时间:2019-04-03 20:08:12

标签: excel vba

我遇到了以下代码的堆栈溢出问题。该错误发生在Set rngToCheck = Range("GenLoanAmount")上,我不太确定为什么会这样,因为似乎发生的事件不足以引起该问题。该代码确实有效,因此如果社区认为有必要,我会将其发布在Code Review上。感谢您的关注。

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rngToCheck As Range
    Set rngToCheck = Range("GenLoanAmount")


    If Not Intersect(Target, Me.Range("FloodIns")) Is Nothing Then
        If Intersect(Target, Me.Range("FloodIns")) = "Y" Or Intersect(Target, Me.Range("FloodIns")) = "y" Then FloodEmail.Show
    End If

    If Not Intersect(Target, Me.Range("FloodInsAct")) Is Nothing Then
        If Intersect(Target, Me.Range("FloodInsAct")) = "Y" Or Intersect(Target, Me.Range("FloodInsAct")) = "y" Then FloodActEmail.Show
    End If

    If Not Intersect(Target, rngToCheck) Is Nothing Then
        If Intersect(Target, rngToCheck) Then
            rngToCheck.NumberFormat = "$#,##0.00"
        End If
    End If

    If Not Intersect(Target, Me.Range("genCloseDate")) Is Nothing Then
        If Intersect(Target, Me.Range("genCloseDate")) <> vbNullString Then FundDateCalc
    End If


End Sub

1 个答案:

答案 0 :(得分:2)

此过程处理Worksheet.Change事件,只要该工作表上的单元格发生更改,Excel就会触发该事件。

处理程序更改该工作表上的单元格(或调用在该工作表上进行更改的代码),因此是可重入的。在过程开始时禁用事件,并在过程结束前重新启用它们,以避免重复发生,直到调用堆栈无法再使用它为止(即,直到出现“堆栈溢出”错误)。

Dim wasEnabled As Boolean
wasEnabled = Application.EnableEvents

Application.EnableEvents = False

'...code...

Application.EnableEvents = wasEnabled