我遇到了以下代码的堆栈溢出问题。该错误发生在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
答案 0 :(得分:2)
此过程处理Worksheet.Change
事件,只要该工作表上的单元格发生更改,Excel就会触发该事件。
处理程序更改该工作表上的单元格(或调用在该工作表上进行更改的代码),因此是可重入的。在过程开始时禁用事件,并在过程结束前重新启用它们,以避免重复发生,直到调用堆栈无法再使用它为止(即,直到出现“堆栈溢出”错误)。
Dim wasEnabled As Boolean
wasEnabled = Application.EnableEvents
Application.EnableEvents = False
'...code...
Application.EnableEvents = wasEnabled