miércoles, 23 de agosto de 2017

VBA: El método Debug y su propiedad Assert

Aprenderemos hoy un método poco conocido que puede ayudarnos a controlar y depurar nuestros fallos de programación con VBA para Excel: método Debug.

Un problema que nos ocurre a todos es que cuando programamos nuestras macros no somos capaces de reconocer o detectar errores en la programación hasta que lanzamos-ejecutamos estas macros.. y será precisamente aquí donde cobre sentido la propiedad Assert del método Debug

Añadiendo este me´todo dentro de nuestro código, 'autmáticamente' detectaremos fallos de ejecución, forzando la detención del procedimiento en nuestra línea; ya que una vez incluida una línea con el método, nuestro procedimiento evaluará y comprobará la condición dada durante la ejecución de nuestra macro, pudiendo depurar errores o fallos que puedan provocar futuras catástrofes.

Es por tanto una alternativa a emplear puntos de interrupción en las líneas de nuestras macros


Muy importante!!, asegúrate de borrar o deshabilitar la instrucción una vez controlado los errores, una vez queden depurados estos fallos... de esta manera evitaremos saltos en la depuración de nuestra macro cuando ya trabajemos en real ;-)


La propiedad
Debug.Assert (condición)
es por tanto un punto de interrupción condicional que provocará una parada siempre y cuando la condición indicada sea FALSA!!!.
En este sencillo ejemplo:
Debug.Assert (Variable >= 0)
nuestra macro se detendrá y saltará el depurador siempre que (Variable >= 0) sea FALSO (es decir, cuando la variable sea negativa).


Veamos un par de ejemplo del método.

En el primer caso nos interesa controlar que el dato introducido es, ciertamente, positivo...
Por tanto necesitamos depurar en caso de introducir un valor negativo...

En el segundo caso, muy similar, queremos controlar si el tipo de dato introducido es de tipo texto-string o no.



En un módulo estándar de nuestro explorador de proyecto VBA insertamos los siguientes códigos:

Sub ControlErroreres_Assert()
Dim Valor As Long
Valor = InputBox("Introduce valor")

'se detendrá/depurará si la condición es Falsa (i.e., si es negativo el dato introducido)
Debug.Assert (Valor >= 0)
MsgBox "Dato Introducido " & Valor
End Sub

Sub ControlErroreres_Assert_2()
Dim strTxt As String
strTxt = InputBox("Introduce texto")

'se detendrá/depurará si la condición sea Falsa (i.e., si el dato no es texto)
'Debug.Assert (Not IsNumeric(strTxt))         'alternativa uno
Debug.Assert (Application.WorksheetFunction.IsText(Val(strTxt)))     'alternativa dos
MsgBox "Dato Introducido " & strTxt
End Sub



Se comprueba fácilmente al ejecutar uno u otro procedimiento, como el depurador saltará cuando no se cumple la condición descrita en el método Debug.Assert... precisamente lo que requeríamos.

Por finalizar con el método Debug comentado hablaremos de su otra propiedad disponible:
Debug.Print (varible)
con una utilidad de control similar al anterior, pero que no provoca la detención del procedimiento, sino que mandará a la ventana de inmediato dentro de nuestro proyecto el valor que indiquemos...
OJO, por que en esta propiedad no hay aspecto condicional, simplemente se trata de llevar el dato a la venta de inmediato.

Después de mostrar la variable escrita en la ventana de inmediato, el código continuará ejecutándose de manera normal.

Como curiosidad indicar que es posible mostrar diferentes variables simultáneamente separándolas por comas, por ejemplo:
Debug.Print X, Y, Z




En un módulo estándar de nuestro explorador de proyecto VBA insertamos los siguientes códigos:

Sub debug_print()
For i = 1 To 10
    Debug.Print ("nuestro cálculo es " & i * Rnd)
Next
End Sub


VBA: El método Debug y su propiedad Assert

No hay comentarios:

Publicar un comentario