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
No hay comentarios:
Publicar un comentario
Nota: solo los miembros de este blog pueden publicar comentarios.