No ejecutar macro cuando no hay archivos abiertos en Excel

Twittear este post Compartir en Facebook

Una de las claves para una buena macro, es el manejo de errores, aunque este tema no se limita solamente a las macros, sino a la programación en general. Cuántas veces no utilizamos aplicaciones donde vemos que sucede un error y la aplicación, en lugar de mandarnos un aviso con el error específico, simplemente se cierra. Esto es molesto.

Para el tema de las macros, sino hacemos estructuras correctas de manejo de errores, Excel no se cierra, pero sí la aplicación nos manda un error propio de Visual Basic para operaciones, pero regularmente la explicación del error es en lenguaje técnico, no apto para todos los usuarios finales de la macro.

Un caso muy marcado es cuando abrimos Excel, pero cerramos todos los archivos. Si tenemos complementos (add-ins) instalados que crean menúes para manejar sus macros, no todos se deshabilitan cuando no hay ningún archivo abierto, entonces cuando elegimos alguna opción de ese menú, nos manda un error de vba.

clip_image002

Este error regularmente ocurre cuando en nuestro código se asignó una variable con Set con se utilizó un objeto con With.

clip_image002[4]

Este error ocurre cuando en nuestro código se intenta manipular un rango.

Lo ideal sería que Excel enviara un mensaje con un texto similar a “No hay ningún archivo abierto”. Para realizarlo, debemos ingresar un bloque de código dentro de nuestra macro que cuente el número de archivos abiertos y si encuentra 1 o menos de 1, lance el error. Decimos que cuente por menos 1, por que el archivo PERSONAL.xls, regularmente está oculto, pero aún así se cuenta como archivo abierto.

Ejemplo de macro:

Sub Macro_ejemplo()
If Application.Workbooks.Count <= 1 Then
GoTo fin
Else
'Con fin de ejemplificar, se manda un mensaje informativo
MsgBox "Hay por lo menos un archivo abierto", vbInformation, "EXCELeINFO"
'Aquí se podrán las instrucciones necesarias para la macro
End If
Exit Sub
fin:
MsgBox "No hay ningún archivo abierto", vbExclamation, "EXCELeINFO"
End Sub

Nota: esta macro será funcional cuando se hagan add-ins propios que sean manipulables mediante un menú.

You may also like...