Отладка VBA, Как пройти через несколько циклов одновременно - PullRequest
0 голосов
/ 23 января 2019

У меня есть цикл, который проходит по 10 тыс. Строк. У меня проблемы с одной записью посередине, и я хочу посмотреть, что делает код с отметкой в ​​5 тыс. Строк. Это не практично делать f5 на каждом следующем.

Как мне запустить до указанного цикла или номера строки?

Ответы [ 3 ]

0 голосов
/ 23 января 2019

Добавьте переменную инкремента в свой цикл, а затем условие, подобное этому:

i = i + 1
if i = 5000 then
   i = 5000                        <---- Do F9 here
end if

Выполните F9 в строке "i = 5000", чтобы добавить точку останова для отладки.

Это остановит работу на 5000 итераций

0 голосов
/ 23 января 2019

Научитесь использовать Debug.Assert, это автоматически приостановит ваш код, когда он оценивается как False.Например:

Sub Demo_Debug_Assert()
    Dim i As Long

    For i = 1 To 100
        Debug.Assert i < 50
    Next i
End Sub

Будет нарушаться при каждом значении i больше 49. Очевидно, что это условие можно изменить по вашим критериям так:

Debug.Assert i <> 5000

Если вы хотите, чтобы оноразбить только на 5000 или

Debug.Assert i < 5000

, чтобы код разбивался на каждое значение после 4999

Для дальнейшего, вместо того, чтобы беспокоиться об удалении этих строк перед использованием кодавы можете создать глобальную константу (здесь она называется DebugMode), которая будет Boolean, чтобы она не срабатывала

Const DebugMode = True
Sub Demo_Debug_Assert()
    Dim i As Long

    For i = 1 To 100
        If DebugMode Then Debug.Assert i < 50
    Next i
End Sub

Изменение глобальной константы на Const DebugMode = False приведет к выполнению вашего кода до концабез паузы

0 голосов
/ 23 января 2019

Поместите что-то вроде If i = 5000 Then Stop в свой цикл. Затем код остановится на i = 5000 в режиме отладки с выделенным Stop. Затем вы можете перейти шаг за шагом, используя F9.

Для цикла

For i = 1 to 10000 '<-- this is YOUR loop!
    If i = 5000 Then Stop

    'your other code here
Next i

Do loop

Если это цикл Do, вставленный в счетчик i

Dim i As Long
Do While Criteria = True
    i = i + 1
    If i = 5000 Then Stop

    'your other code here
Loop
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...