Buscar..


Sintaxis

  • Debug.Print (cadena)
  • Para para

Debug.Print

Para imprimir una lista de las descripciones de los códigos de error en la ventana Inmediata, Debug.Print a la función 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

Puede mostrar la ventana Inmediato por:

  • Selección de V er | Me imagino una ventana desde la barra de menú
  • Usando el atajo de teclado Ctrl-G

Detener

El comando Detener pausará la ejecución cuando se llame. A partir de ahí, el proceso se puede reanudar o ejecutar paso a paso.

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

Ventana inmediata

Si desea probar una línea de código de macro sin necesidad de ejecutar un subcomité completo, puede escribir comandos directamente en la ventana Inmediato y presionar ENTER para ejecutar la línea.

¿Para probar la salida de una línea, puede precederla con un signo de interrogación ? para imprimir directamente en la ventana Inmediata. Alternativamente, también puede usar el comando de print para print la salida.

Mientras esté en el Editor de Visual Basic, presione CTRL + G para abrir la ventana Inmediato. Para cambiar el nombre de la hoja seleccionada actualmente a "Hoja de ejemplo", escriba lo siguiente en la ventana Inmediato y presione ENTER

   ActiveSheet.Name = "ExampleSheet"

Para imprimir el nombre de la hoja seleccionada actualmente directamente en la ventana Inmediata

? ActiveSheet.Name
ExampleSheet

Este método puede ser muy útil para probar la funcionalidad de las funciones integradas o definidas por el usuario antes de implementarlas en el código. El siguiente ejemplo muestra cómo se puede usar la ventana Inmediato para probar la salida de una función o serie de funciones para confirmar un esperado.

'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

La ventana Inmediato también se puede usar para configurar o restablecer la aplicación, el libro de trabajo u otras propiedades necesarias. Esto puede ser útil si tiene Application.EnableEvents = False en una subrutina que inesperadamente lanza un error, causando que se cierre sin restablecer el valor a True (lo que puede causar una funcionalidad frustrante e inesperada. En ese caso, los comandos se pueden escribir directamente en la ventana inmediata y ejecute:

? 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

Para técnicas de depuración más avanzadas, se pueden usar dos puntos : como separador de línea. Esto se puede usar para expresiones de varias líneas, como en bucle en el siguiente ejemplo.

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

Utilice el temporizador para encontrar cuellos de botella en el rendimiento

El primer paso para optimizar la velocidad es encontrar las secciones de código más lentas. La función Timer VBA devuelve el número de segundos transcurridos desde la medianoche con una precisión de 1/255 de segundo (3.90625 milisegundos) en PC con Windows. Las funciones VBA Now y Time son solo precisas a un segundo.

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"

Agregando un punto de interrupción a su código

Puede agregar fácilmente un punto de interrupción a su código haciendo clic en la columna gris a la izquierda de la línea de su código VBA donde desea que se detenga la ejecución. Aparece un punto rojo en la columna y el código del punto de interrupción también se resalta en rojo.

Puede agregar múltiples puntos de interrupción a lo largo de su código y reanudar la ejecución presionando el icono "jugar" en la barra de menú. No todo el código puede ser un punto de interrupción como líneas de definición variable, la primera o la última línea de un procedimiento y las líneas de comentarios no se pueden seleccionar como un punto de interrupción.

introduzca la descripción de la imagen aquí

Ventana Locales del Depurador

La ventana Locales proporciona un acceso fácil al valor actual de las variables y objetos dentro del alcance de la función o subrutina que está ejecutando. Es una herramienta esencial para depurar su código y pasar por los cambios para encontrar problemas. También te permite explorar propiedades que quizás no sabías que existían.

Tomemos el siguiente ejemplo,

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

En el Editor de VBA, haga clic en Ver -> Ventana Locales

Donde el menú local está en la ventana

Luego, al pasar por el código con F8 después de hacer clic dentro de la subrutina, nos hemos detenido antes de asignar findMeinLocals. Abajo puede ver que el valor es 0 --- y esto es lo que se usaría si nunca le asignara un valor. El objeto de rango es 'Nada'.

En este paso las variables no son nada ...

Mostrando las variables no son nada.

Si nos detenemos justo antes de que finalice la subrutina, podemos ver los valores finales de las variables.

Establece un punto de depuración ... si quieres

Podemos ver findMeInLocals con un valor de 1 y tipo de Integer, y FindMeInLocals2 con un tipo de Rango / Rango. Si hacemos clic en el signo + podemos expandir el objeto y ver sus propiedades, como conteo o columna.

introduzca la descripción de la imagen aquí



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow