Почему я сталкиваюсь с ошибкой переполнения стека - PullRequest
3 голосов
/ 03 апреля 2019

Я столкнулся с проблемой переполнения стека с помощью приведенного ниже кода. Ошибка произошла на 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 Ответ

2 голосов
/ 03 апреля 2019

Эта процедура обрабатывает событие Worksheet.Change, которое запускается Excel при каждом изменении ячейки на этом листе.

Обработчик изменяет ячейки на этом листе (или вызывает код, который вносит изменения на этом листе), ипоэтому повторно входящий.Отключите события в начале процедуры и повторно включите их до ее окончания, чтобы избежать повторения, пока стек вызовов не сможет больше его принимать (т.е. пока вы не получите ошибку «переполнение стека»).

Dim wasEnabled As Boolean
wasEnabled = Application.EnableEvents

Application.EnableEvents = False

'...code...

Application.EnableEvents = wasEnabled
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...