Tratar errores en Excel y resaltarlos con unas marcas

Hola necesito que me ayudes con dos temas espero que puedas.
1. Necesito saber como tratar varios errores y de pendiendo de donde se produzca el error me vuelva a pedir una cosa u otra. Ejemplo
Tengo una macro que ejecuta 3 inputbox uno para entrar el código de búsqueda cuya variable es del tipo string otro para un nombre cuya variable también es de tipo string y por último otro para el número de teléfono cuya variable es del tipo integer.
Yo lo que necesito es que si el error se produce cuando me pide el código vuelva a pedirme el código y si se produce con el nombre vuelva a pedirme el nombre y si se produce con el teléfono me vuelva a pedir el teléfono.
Claro que antes de volver a pedir lo que tenga que pedir muestre un msgbox explicando cual fue el error y si es posible que ese mensaje muestre el circulo rojo con la crus blanca.
Desde ya muchas gracias.
Tecnopunta

1 Respuesta

Respuesta
1
Un par de cosas:
¿Qué es para ti un error?, o sea, ¿qué tiene que pasar para que tenga que salir el msgbox que dices para que vuelva a preguntar?
Y otra cosa, ¿crees qué es correcto que el numero de teléfono sea un integuer? yo pondria un string.
Cuando me expliques lo del error te pongo un poco de código.
Hola Ramon te comente que yo recién estoy empezando con esto de escribir macros y te confienso que con el tema de las definiciones de las variables por lo que te pido si me podes explicar un popco sobre este tema.
Lo del error me refiero por ejemplo que si al pedirme un nombre cuya variable es para texto colocara el nro de teléfono esto causaría un error pero yo no quiero que después que aparezca un msgbox indicando cual fue el error, vuelva al principio del programa sino que si fue al pedirme el nombre el programa que vuelva a ejecutarse donde me pide el nombre y si ocurre en el teléfono vuelva a ejecutar la parte del teléfono.
Espero haber sido claro en lo que pretendo.
Desde ya muchas gracias.
Atentamente.
Tecnopunta
*****************
Si tenes alguna *
consulta sobre *
windows o cual- *
quier problema *
conla pc ya sea *
de reparación o *
instalación no *
dudes en consul-*
tarme. *
Me encontras en *
la categoría *
Win 9x y Me *
Intentare explicarte un poco lo de las variables.
Cuando se quieren almacenar campos como el numero de teléfono, el código postal o el numero de pasaporte, por ejemplo, se usan variables de tipo String y no Integer o cualquier otra variable numérica, porque aunque sean números, no se hacen operaciones con ellos por lo tanto no tiene sentido.
En cambio si que tiene sentido guardarlo como texto para comprobar, por ejemplo, el numero de caracteres.
Si sabes que el numero de teléfono tiene que tener 9 cifras, podrás saber si se ha escrito correctamente con la función Len.
Ej:
If len(num_tlf) <> 9 Then
Msgbox "Error, el telefono tiene que tener 9 cifras"
Endif
Y ahora vamos a ver como haria yo el control de errores con los inputbox.
'Primero declarar las 3 variables:
Dim codigo as string
Dim nombre as string
Dim num_tlf as string
'Luego las preguntas con el control de errores. Para ello se tendran que poner unas etiquetas para que si falla, vuelva a preguntar:
Preguntar_codigo:
codigo = InputBox("Escribe el codigo", "CODIGO")
'Este error comprueba que el codigo tenga entre 3 y 5 cifras, por ejemplo
If Len(codigo) < 3 Or Len(codigo) > 5 Then GoTo Preguntar_codigo
Preguntar_nombre:
nombre = InputBox("Escribe el nombre", "NOMBRE")
'Este error comprueba que se haya escrito algun nombre
If nombre = "" Then GoTo Preguntar_nombre
Preguntar_telefono:
num_tlf = InputBox("Escribe el telefono", "TELEFONO")
'Este error comprueba que el telefono tenga 9 cifras
If Len(num_tlf) <> 9 Then GoTo Preguntar_telefono
'Y finalmente ya puedes copiar el contenido de las variables en las celdas que tu quieras, por ejemplo:
Range("A1").value = codigo
Range("B1").value = nombre
Range("C1").value = num_tlf
Espero que te sirva de ayuda.
Si tienes más dudas, ya sabes.
Hasta pronto,
Ramon
La consulta es la siguiente como hago para controlar que verdaderamente cuando te pida el teléfono pongan verdaderamente un nro y no que pongan un texto por error ejemplo en lugar de poneer 48 99 90 (6 dígitos ) pongan nacho (5)
Ok, en este caso tendrás que mirar carácter por carácter a ver que han puesto y si detectas que es una letra pues sera invalido.
Para ello necesitas la instrucción:
Mid(cadena, inicio, longitud)
Donde:
cadena = la variable de texto
inicio = la letra que vas a examinar
longitud = 1
Y para ver si es una letra o un numero utilizaremos el código Ascii, con la instrucción Asc(letra) porque devuelve su valor numérico y las letras están entre:
65 - 90 MAYUSCULAS
97 - 122 minusculas
En este caso, te recomiendo que borres la parte del telfono y la sustituyas por esto:
Preguntar_telefono:
num_tlf = InputBox("Escribe el telefono", "TELEFONO")
'Almenos tiene que haber 6 caracteres
If Len(num_tlf) < 6 Then GoTo Preguntar_telefono
i = 1
While i <= Len(num_tlf)
If Asc(Mid(num_tlf, i, 1)) >= 65 And Asc(Mid(num_tlf, i, 1)) <= 90 Then
MsgBox "Hay letras mayúsculas en el teléfono", , "Error"
GoTo Preguntar_telefono
End If
If Asc(Mid(num_tlf, i, 1)) >= 97 And Asc(Mid(num_tlf, i, 1)) <= 122 Then
MsgBox "Hay letras minúsculas en el teléfono", , "Error"
GoTo Preguntar_telefono
End If
i = i + 1
Wend
Fíjate que he cambiado la primera restricción que ya te había puesto de <> 9 por la de < 6, porque si obligas a que tenga una longitud fija tendras problemas para aquellos que escriban el telefono con espacios o sin ellos.
Gracias por tu dedicación y seguramente te estaré en molestando cuando tenga otro problema para resolver.
Muchas gracias.
Y ya sabes que quedo a tu disposición por cualquier consulta que tengas sobre windows o problemas con la Pc.
tecnopunta

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas