Los errores aparecen simpre y no puedes decir que no xDD . Un aplicación, sobre todo mientras mas compleja se va haciendo, presenta errores. Asi sean de programación o del mimso programa (es decir bugs).
Lo que hare aquí sera explicar que pasa con estos errores, como los podemos evitar, y porque.
Los errores en timepo de ejecución son quiza los mas problematicos, son esos que aparecen durante el proceso del programa. Podria ser un error en time pode ejecución algo como esto:
Private Sub Command1_Click()
Dim Cadena As String
Cadena = 123
End If
Para algunos podria estar bien, y para otros no. El caso es que NO esta bien; esto suele ser un error comun en los principiantes o en los despistados

. El problema es que la variable “Cadena” esta declarada como una Cadena, propiamente dicho. Y nosostros no le estamos aplicando una cadena sino un numero entero. La correccion seria esta:
Private Sub Command1_Click()
Dim Cadena As Integer
Cadena = 123
End If
Pero hay diferentes tipos de errores, el anterior es un error sorpresivo (o mas bien inesperado), ya que se produce cuando el usuario hace clic en el boton y algo que no esperaba ver. Para solucionar este error habria que cambiar todo ( o una parte) del codigo, es decir que si ya lo habiamos compilado y ditribuido sera 100% ineficiente el programa.
Pero hay otros errores como puede ser el intentar acceder a un archivo que no existe, este tipo de errores puede ser prevenido si introducimos un pcoo mas de codigo a nuestro programa. Por ejemplo, que antes de intentar acceder verifique si existe o no. Y después vale por parte del usuario la accion que tomara el programa: Si crear el archivo que no existe o dejar todo como esta y salir.
Lo peor de todo, es que cuando se producen estos errores en timepo de ejecución VB nos manda un error bastante feo y sorpresivo ante el usuario (si, aunque no estemos con el entorno de VB y el programa este compilado es VB quien nos manda le error) que obliga, en la mayoria de la veces, a finalizar la aplicación.
Por otra parte estan los errores en tiempo de diseño, estos son mas controlables, aunque de una u otra forma sigue siendo un error. En este caso VB nos muestra una mensaje que nos da los datos del error y nos permite obtener la linea o segmento de codigo que fallo (desde “Depurar”) o finalizar la aplicación (desde “Terminar”).
Este tipo de errores solo se producen cuando estamos “probando” el programa desde el entorno de Visual Basic. A diferencia de los anteriores aquí podemos retroceder y arreglar lo que esta mal para la posterior compilación y ditribucion del programa.
“On Error” para capturar errores
Seguramente muchos conocen la instrucción “On Error Resume Next”. Igual la voy a explicar:
“On Error Resume Next” permite que al encontrar un error el programa siga su curso, sin darle importancia. Es muy utilizado para los virus, u otras aplicaciones que quieran ser “silenciosas” y quieran evitar errores sin que el usuario se de cuenta.
En realidad aquí estamos usando dos instrucciones, una es “On Error” y la otra es “Resume Next”. La instrucción “On Error” lo que hace es que al detectar un error redirija la “posición de ejecución” (por decirlo de alguna manera, ya se que no existe algo llamado asi

) a la etiqueta indicada luego. Una etiqueta, para el que no lo sabe, es como una porción de codigo aparte. Seria como tenber un Sub dentro de otro Sub.
En fin, y “Resume Next” significa “Segui por donde ibas”. Asi de simple y a secas xDD
Lo que veremos a continuación sera “On Error”, que mas bien va a ser “On Error Goto”. Luego del “Goto” se indica la etiqueta a la cual se ira si se produce algun error; en esta etiqueta, lo que tenemos que hacer es colocar una rutina que identifique el error y haga algo con respectoa él. O simplemente que le avise al usuario sobre este error, pero de una forma mas elegante que como lo hace VB. Ademas podemos darle la oportunidad al usuario de si quiere o no finalizar la aplicación.
Por lo general, y es lo mas conveniente, se ubica la instrucción On Error antes de toda la seccion del codigo dentro de un Sub o de un Function. Vamos a armar un ejemplo de a poco:
Primero vamos a tomar un punto donde queramos controlar un error en caso de que se produsca alguno. Yo tomare el clic de un boton, es decir que si al hacer clic en el boton, se produce algun error sera capturado por nuestro programa:
Private Sub Command1_Click()
End Sub
Ahora tenemos que definir una etiqueta. La misma puede llevar el nombre que quieras, siempre y cuando no sea un variable o una palabra reservada de VB. Las reglas de estas son iguales a la de las variables (o sea, que nunca se te ocurra poner un numero al principio del nombre d el aetiqueta!). En mi caso llamare a la etiqueta “EtiquetaDeError”, así que vamos a aplicar el codigo:
Private Sub Command1_Click()
On Error Goto EtiquetaDeError
End Sub
Si llegaras a ejecutar el codigo asi, seguramente se producira un error. Y es que no emos definido la etiqueta… Y ahora me diras “¿Pero si y lo hice, mi codigo es igual al tuyo?” y yo simplemente te dire: “Yo no la defini a la etiqueta todavía”.
Para esto debemos introducir el nombre de la etiqueta al final del codigo. ¿Por qué al final? Porque cuando se ejecuta una etiqueta se produce una sucesion del codigo, es decir que se ejecuta la linea 1 luego la 2 y luego la 3, y todo asi. Al igual que un Sub, pero con la diferencia que la etiqueta no tiene un punto para indicarle a VB donde finaliza, así que si ponemos la etiqueta en medio del Sub, solo se ejecutara la mitad del codigo, y la otra mitad se ejecutara cuando se reprodusca la etiqueta (cosa que puede no suceder a menos que hagamos una llamada, ya que VB no ejecuta la etiqueta a menos que sea llamada por “algo o alguien”).
En fin la etiqueta la definimos asi:
Private Sub Command1_Click()
On Error Goto EtiquetaDeErrot
EtiquetaDeError:
End Sub
Debajo del nombre de la etiqueta va todo lo que se ejecutara si se produce un error. Si podemos alli un “Resume Next”, seria lo mismo que haber puesto al inicio “On Error Resume Next”. Las dos intrucciones, “traducidad” significan “Si hay error, sea cual sea, segui para adelante”.
Ahora vamos a ver algunas funciones de las que disponemos para identificar un error. VB nos proporciona, entre otras, la sentencia “Err” que seguida del operador punto (.) nos pone a disposición varias opciones y funciones. La que nos interesaran a nostros seran:
Err.Description: Muestra la descripción del error que se prodrujo
Err.Number: Muestra el numero del error que se produjo.
Con estos datos podriamos crear una sentencia que muestre al usuario un mensaje de error mas “lindo” que el de VB; y le daremos la posibilidad al usuario de seguir ejecutando el programa (aquí tendremos 2 opciones) o de finalizar el programa o la rutina (tambien son 2 opciones).
Primero lo primero y no nos enrosquemos, vamos a crear una sentencia que muestre un mensaje con las siguientes caracteristicas:
Titulo: La palabra “Error:” y el numero del error
Contenido: la frace “Se ah producido el siguinte error:”. Luego un salto de carro (un enter) y la frace “Error Nº” y el numero del error. Otro salto de carro mas, y la descripción del error. Ahora otro salto de carro mas y la pregunta “¿Decea Continuar?”. Esto seria asi:
MsgBox “Se ah producido el siguiente error:” & vbcrlf & “Error Nº “ & Err.Number & vbcrlf & Err.Description & vbcrlf & “¿Decea Continuar?”, vbYesNo, “Error “ & Err.Number
Ahora esto lo situamos en la etiqueta:
Private Sub Command1_Click()
On Error Goto EtiquetaDeErrot
EtiquetaDeError:
MsgBox “Se ah producido el siguiente error:” & vbcrlf & “Error Nº “ & Err.Number & vbcrlf & Err.Description & vbcrlf & “¿Decea Continuar?”, vbYesNo, “Error “ & Err.Number
End Sub
Ahora vamos a crear un error para ver si funciona, hagamos un error de tipos:
Private Sub Command1_Click()
On Error Goto EtiquetaDeErrot
Dim Cadena As String
Cadena = 123
EtiquetaDeError:
MsgBox “Se ah producido el siguiente error:” & vbcrlf & “Error Nº “ & Err.Number & vbcrlf & Err.Description & vbcrlf & “¿Decea Continuar?”, vbYesNo, “Error “ & Err.Number
End Sub
Bueno, hasta aquí ya hemos visto un tema que les servira mucho para sus aplicaciones…
Se q ue esto es poco, pero sigue, pasa que decidi postear esta parte primero y la otra después

Salu2!