5 errores comunes en Macros [VBA] de Excel y cómo solucionarlos – PARTE 1
<<CURSO DE MACROS DESDE CERO>>
En más de una ocasión me han hecho preguntas sobre errores que se generan al momento de estar desarrollando un proyecto en Excel con VBA. Con base en las preguntas que recibo, me doy cuenta que a muchas personas les suceden los mismos errores, sin embargo, el problema va más allá. El verdadero problema es que aunque les de la solución, no se paran a pensar las verdaderas razones de los errores, además de que tienen la solución y listo, se olvidan de documentarse.
Es por eso que decidí hacer este tutorial. En el video intento explicar con lujo de detalles los motivos de los errores, les dos las razones de las causas y les ofrezco la solución.
Ver Video 5 errores comunes en VBA y cómo solucionarlos – PARTE 1
Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.
Error 13. No coinciden los tipos
Figura 1. No coinciden los tipos. Revisa los valores ingresados.
Recordemos que es importante declarar variables y asignarles un tipo de dato. Si por ejemplo, definimos la variable Numero1 como Integer (entero), y si al momento de la ejecución de la macro ingresamos un valor de texto a esa variable, entonces veremos el error que nos dice que los Tipos de las variables no coinciden. En otras palabras, el valor almacenado en la variable no coincide con el tipo definido.
Solución
La solución a este error es básicamente que el usuario final ingrese los valores adecuados, pero también podemos implementar un manejador de errores, para que si el usuario ingresa un valor de texto, se muestre un mensaje indicándonos que el valor no es correcto, además de que tenemos un mensaje definido por nosotros, en lugar de un error de VBA.
Option Explicit 'EXCELeINFO 'MVP Sergio Alejandro Campos 'http://www.exceleinfo.com 'https://www.youtube.com/user/sergioacamposh 'http://blogs.itpro.es/exceleinfo '1. 2. 'No coinciden los tipos 'No se han definido las variables Sub SumarNumeros() Dim Numero1 As Integer Dim Numero2 As Integer On Error GoTo ManejadorErrores Numero1 = VBA.InputBox("Ingresa el número 1") Numero2 = VBA.InputBox("Ingresa el número 2") MsgBox "Suma: " & Numero1 + Numero2 Exit Sub ManejadorErrores: MsgBox "Ingresa valores numéricos." End Sub
Fuente: Curso Excel VBA y Macros – Cap. 21 – Función y Método InputBox para capturar valores
Error de compilación. No se ha definido la variable.
Figura 2. Declaración de variables en Excel VBA.
Este error va de la mano con el Error 13. Mi recomendación siempre será que se definan las variables, para tener un mejor manejo de la memoria. Si deseamos que el IDE de VBA nos obligue a que declaremos las variables, debemos incluir la instrucción Option Explicit al inicio de cada módulo.
Solución
Aunque siempre existe la posibilidad de no declarar variables, al final sigue siendo una cuestión de opción, pero si deseas ser parte de los desarrolladores que usan las buenas prácticas, declara variables. No seas como JavaScript.
Dim Numero1 As Integer Dim Numero2 As Integer
Fuente: Curso Excel VBA y Macros – Cap. 14 – Variables, constantes y tipos de datos
Error 6. Desbordamiento.
Figura 3. Desbordamiento en Excel VBA cuando definimos un valor mayor a la variable.
En pocas palabras, un error de Desbordamiento sucede cuando asignamos un valor que no cabe en la variable. Te explico. Supongamos que defines la variable Numero1 como Integer. Al momento de correr la macro, pides que el usuario ingrese un valor numérico y el número que se ingresa es 100,000.
Sucede que la variable Numero1 fue declarada de tipo Entero (Integer), pero este tipo de variable, sólo acepta valores hasta 32,727, por lo que el valor de 100 mil no cabe en esta variable.
Solución
Cuando desarrollamos proyectos usando macros, siempre será obligatorio prevenir los valores que los usuarios ingresen, además de definir tus variables con el tipo de valor que realmente esperas obtener para tus variables. Si defines una variable como Fecha (Date), debes asegurarte que el usuario final ingrese este valor, y para eso, además de definir las variables, implementar manejadores de errores, también es necesario validar los valores usando la intrucción IF THEN ELSE para tomar decisiones.
Fuente: Curso Excel VBA y Macros – Cap. 14 – Variables, constantes y tipos de datos
Error 1004. No se puede obtener la propiedad VLookup de la clase WorksheetFunction
Figura 4. Uso de BUSCARV (VLOOKUP) en Formulario de Excel VBA.
Este error se nos genera cuando usamos la función BUSCARV (VLOOKUP) en una macro. En nuestro ejemplo tengo un Formulario (UserForm) que tiene un TextoBox que me pide un nombre, al dar clic en el botón Buscar edad, el valor de la edad se mostrará en un segundo TextBox.
Quiero ser claro, SIEMPRE que veas este error, es porque el valor que ingresaste no se encontró.
Solución
Este error tiene dos soluciones, implementar un Controlador de errores donde validemos con IF THEN ELSE si el error es el 1004. Si es así, entonces realizamos alguna acción o simplemente mostramos un mensaje personalizado por nosotros. La segunda solución será que si el valor sí existe, entonces repasemos los parámetros de la función BUSCARV para validar si no están en el orden correcto.
'4. vlookup en VBA Private Sub CommandButton1_Click() Dim Edad As Integer On Error GoTo ManejadorErrores Edad = Application.WorksheetFunction.VLookup(Me.TextBox1.Value, Sheets("Hoja1").Range("A2:B5"), 2, 0) Me.TextBox2.Value = Edad Exit Sub ManejadorErrores: If Err.Number = 1004 Then MsgBox "El valor ingresado no fue encontrado", vbInformation Else MsgBox "Ha ocurrido un error: " & Err.Description End If End Sub
Fuente 1: Uso de BUSCARV con macros.
Fuente 2: Videos para dominar BUSCARV.
Error 9. Subíndice fuera del intervalo
Figura 5. Este error sucede en Excel VBA cuando trabajamos con una hoja que no existe.
Este error es más común de los que parece, aunque la definición sea algo confusa. Éste se genera cuando estamos trabajando con alguna colección de objetos, por ejemplo las Hojas de tu archivo, y la macro intenta llevar a cabo una acción con esa hoja, pero resulta que la hoja no existe. Si por ejemplo tienes en tu archivo la Hoja1, pero en tu macro la define como Hoja11, verás este error, ya que la hoja no existe en tu la colección de hojas de tu archivo.
Solución
Es por eso que siempre que me preguntan en el canal, porqué sale ese error, mi respuesta siempre es “revisa los nombres”.
En la siguiente macro manejamos el error 9 y mostramos el nombre de la hoja que no existe, para que los usuarios de tu archivo o tú mismo, ahorren tiempo en averiguar por qué fue el error.
'5. 'Subíndice fuera del intervalo Sub ColorHojas() Dim i As Integer Dim NombreHoja As String On Error GoTo ManejadorErrores For i = 1 To 5 NombreHoja = "Hoja" & i 'ThisWorkbook.Sheets(NombreHoja).Tab.ColorIndex = 40 ThisWorkbook.Sheets(NombreHoja).Tab.ColorIndex = xlNone Next i Exit Sub ManejadorErrores: If Err.Number = 9 Then MsgBox "La hoja: " & NombreHoja & " no existe." Else MsgBox "Ha ocurrido un error: " & Err.Description End If End Sub
Fuente: Curso Excel VBA y Macros – Cap. 25 – Implementar un Manejador de errores
Descarga el archivo de ejemplo
Errores en VBA y cómo solucionarlos – EXCELeINFO.zip
Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.