Цикл превращается в бесконечность и приводит к краху Excel - PullRequest
0 голосов
/ 11 июня 2018

В настоящее время я работаю над частью моего кода VBA, который должен вычислять итоговое значение из разных таблиц в другой таблице, если соблюдаются некоторые условия.Когда мои условия не соблюдаются, код в порядке, но когда я попадаю в условие, строка с *** заставляет мой код работать до бесконечности и приводит к аварийному завершению Excel.Я проверил синтаксис, и это не должно быть проблемой.Я честно не понимаю, что не так с этой строкой кода.

Заранее благодарю за помощь!

'----------------------------------------------------
'-- Buildings' peak cooling load total calculation --
'----------------------------------------------------

Dim m As Integer, n As Integer

If Range("NP_BUILDING_TOTAL_YN") = "Yes" Then

If (Range("NP_BUILDING_TOTAL_OF") = "No" Or Range("NP_BUILDING_TOTAL_OF") = "") And (Range("NP_BUILDING_TOTAL_DF") = "No" Or Range("NP_BUILDING_TOTAL_DF") = "") Then

    For m = 1 To Sheet4.Range("NP_NBR_Y")

        For n = 1 To Sheet4.Range("NP_NBR_BUILDING")

            If Range("NP_BUILDING_TOTAL_YN" & n) = "Yes" Then

                ***Range("NP_BUILDING_TOTAL_TABLE")(m + 1, 2).Value = Range("NP_BUILDING_TOTAL_TABLE")(m + 1, 2).Value + Range("INPUTS_BUILDING" & n)(m + 3, 2).Value***

            End If

        Next n

    Next m

End If

If Range("NP_BUILDING_TOTAL_OF") = "Yes" And (Range("NP_BUILDING_TOTAL_DF") = "No" Or Range("NP_BUILDING_TOTAL_DF") = "") Then

    For m = 1 To Sheet4.Range("NP_NBR_Y")

        For n = 1 To Sheet4.Range("NP_NBR_BUILDING")

            If Range("NP_BUILDING_TOTAL_YN" & n) = "Yes" Then

                Range("NP_BUILDING_TOTAL_TABLE")(m + 1, 2).Value = Range("NP_BUILDING_TOTAL_TABLE")(m + 1, 2).Value + Range("INPUTS_BUILDING" & n)(m + 3, 2).Value * Range("INPUTS_BUILDING" & n)(m + 3, 4).Value

            End If

        Next n

    Next m

End If

If (Range("NP_BUILDING_TOTAL_OF") = "No" Or Range("NP_BUILDING_TOTAL_OF") = "") And Range("NP_BUILDING_TOTAL_DF") = "Yes" Then

    For m = 1 To Sheet4.Range("NP_NBR_Y")

        For n = 1 To Sheet4.Range("NP_NBR_BUILDING")

            If Range("NP_BUILDING_TOTAL_YN" & n) = "Yes" Then

                Range("NP_BUILDING_TOTAL_TABLE")(m + 1, 2).Value = Range("NP_BUILDING_TOTAL_TABLE")(m + 1, 2).Value + Range("INPUTS_BUILDING" & n)(m + 3, 2).Value * Range("INPUTS_BUILDING" & n)(m + 3, 5).Value

            End If

        Next n

    Next m

End If

If Range("NP_BUILDING_TOTAL_OF") = "Yes" And Range("NP_BUILDING_TOTAL_DF") = "Yes" Then

    For m = 1 To Sheet4.Range("NP_NBR_Y")

        For n = 1 To Sheet4.Range("NP_NBR_BUILDING")

            If Range("NP_BUILDING_TOTAL_YN" & n) = "Yes" Then

                Range("NP_BUILDING_TOTAL_TABLE")(m + 1, 2).Value = Range("NP_BUILDING_TOTAL_TABLE")(m + 1, 2).Value + Range("INPUTS_BUILDING" & n)(m + 3, 2).Value * Range("INPUTS_BUILDING" & n)(m + 3, 4).Value * Range("INPUTS_BUILDING" & n)(m + 3, 5).Value

            End If

        Next n

    Next m

End If

End If

1 Ответ

0 голосов
/ 11 июня 2018

Вы изменяетесь в Событии Изменения - которое инициирует вызов события Изменения, где вы изменяете данные - которое инициирует вызов события Изменения (и так далее ...)

Для предотвращения рекурсивного запуска подпрограммы события поместите эту строку в начало подпрограммы:

Application.EnableEvents = False

и в конце

Application.EnableEvents = True
...