Поиск…


Синтаксис

  • Debug.Print (строка)
  • Стоп () / Стоп

Debug.Print

Чтобы распечатать список описаний кодов ошибок в окне «Немедленное», перейдите к функции Debug.Print :

Private Sub ListErrCodes()
    Debug.Print "List Error Code Descriptions"
    For i = 0 To 65535
        e = Error(i)
        If e <> "Application-defined or object-defined error" Then Debug.Print i & ": " & e
    Next i
End Sub

Вы можете показать окно «Немедленное»:

  • Выбор V iew | I mmediate Window из строки меню
  • Использование сочетания клавиш Ctrl-G

Стоп

Команда Stop приостанавливает выполнение при вызове. Оттуда процесс можно возобновить или выполнить шаг за шагом.

Sub Test()
    Dim TestVar as String
    TestVar = "Hello World"
    Stop                    'Sub will be executed to this point and then wait for the user
    MsgBox TestVar
End Sub

Немедленное окно

Если вы хотите протестировать строку макрокода, не требуя запуска всего суб, вы можете вводить команды непосредственно в окно Immediate и нажимать ENTER для запуска строки.

Для тестирования вывода строки вы можете поставить перед ним знак вопроса ? для печати непосредственно в окне Immediate. В качестве альтернативы вы также можете использовать команду print для вывода вывода.

В редакторе Visual Basic нажмите CTRL + G чтобы открыть окно Immediate. Чтобы переименовать текущий выбранный лист в «ExampleSheet», введите следующее в окне «Немедленное» и нажмите ENTER

   ActiveSheet.Name = "ExampleSheet"

Чтобы напечатать имя текущего выбранного листа непосредственно в окне «Немедленное»

? ActiveSheet.Name
ExampleSheet

Этот метод может быть очень полезен для проверки функциональности встроенных или определенных пользователем функций перед их внедрением в код. В приведенном ниже примере показано, как окно Immediate можно использовать для проверки вывода функции или ряда функций для подтверждения ожидаемого.

'In this example, the Immediate Window was used to confirm that a series of Left and Right 
'string methods would return the desired string

'expected output: "value"
print Left(Right("1111value1111",9),5) ' <---- written code here, ENTER pressed
value                                  ' <---- output

Непосредственное окно также может использоваться для установки или сброса приложений, рабочей книги или других необходимых свойств. Это может быть полезно, если у вас есть Application.EnableEvents = False в подпрограмме, которая неожиданно вызывает ошибку, заставляя ее закрываться без сброса значения в True (что может вызвать разочарование и неожиданную функциональность. В этом случае команды могут быть введены непосредственно в окно Immediate и запустите:

? Application.EnableEvents       ' <---- Testing the current state of "EnableEvents"
False                            ' <---- Output
Application.EnableEvents = True  ' <---- Resetting the property value to True
? Application.EnableEvents       ' <---- Testing the current state of "EnableEvents"
True                             ' <---- Output

Для более сложных методов отладки двоеточие : можно использовать в качестве разделителя строк. Это можно использовать для многострочных выражений, таких как цикл в приведенном ниже примере.

x = Split("a,b,c",","): For i = LBound(x,1) to UBound(x,1): Debug.Print x(i): Next i '<----Input this and press enter
a '<----Output
b '<----Output
c '<----Output

Использование таймера для поиска узких мест в производительности

Первым шагом в оптимизации скорости является поиск самых медленных разделов кода. Функция Timer VBA возвращает количество секунд, прошедших с полуночи, с точностью 1/256 секунды (3,90625 миллисекунды) на компьютерах под управлением Windows. Функции VBA Now и Time верны с точностью до секунды.

Dim start As Double       ' Timer returns Single, but converting to Double to avoid 
start = Timer             ' scientific notation like 3.90625E-03 in the Immediate window
' ... part of the code
Debug.Print Timer - start; "seconds in part 1" 

start = Timer
' ... another part of the code
Debug.Print Timer - start; "seconds in part 2"

Добавление точки останова к вашему коду

Вы можете легко добавить точку останова в свой код, нажав на серый столбец слева от строки вашего кода VBA, где вы хотите остановить выполнение. В столбце появляется красная точка, а код точки останова также выделяется красным цветом.

Вы можете добавить несколько точек останова по всему вашему коду и возобновить выполнение, нажав значок «играть» в строке меню. Не весь код может быть точкой останова в качестве строк определения, первая или последняя строка процедуры и строки комментариев не могут быть выбраны в качестве точки останова.

введите описание изображения здесь

Окно локаторов отладки

Окно Locals обеспечивает легкий доступ к текущему значению переменных и объектов в рамках функции или подпрограммы, в которой вы работаете. Это важный инструмент для отладки вашего кода и перехода к изменениям, чтобы найти проблемы. Он также позволяет вам исследовать свойства, которые, возможно, не были известны.

Возьмем следующий пример:

Option Explicit
Sub LocalsWindowExample()
    Dim findMeInLocals As Integer
    Dim findMEInLocals2 As Range
    
    findMeInLocals = 1
    Set findMEInLocals2 = ActiveWorkbook.Sheets(1).Range("A1")
End Sub

В редакторе VBA нажмите «Вид» -> «Окно локалей».

Когда в окне локальных настроек находится окно

Затем, перейдя через код с помощью F8 после нажатия внутри подпрограммы, мы остановились перед тем, как назначить findMeinLocals. Ниже вы можете увидеть, что значение равно 0 --- и это то, что будет использовано, если вы никогда не назначили ему значение. Объект диапазона - «Ничего».

На этом шаге переменные ничего ...

Отображение переменных - ничего.

Если мы остановимся до завершения подпрограммы, мы увидим окончательные значения переменных.

Установите точку отладки ... если хотите

Мы можем видеть findMeInLocals со значением 1 и типом Integer и FindMeInLocals2 с типом Range / Range. Если щелкнуть знак +, мы можем развернуть объект и увидеть его свойства, такие как счетчик или столбец.

введите описание изображения здесь



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow