Has creado un libro de Excel que ofrece amplia funcionalidad a los usuarios a través de algunas macros, pero pronto recibes varias llamadas telefónicas para avisarte que dicha funcionalidad es inexistente y que el libro de Excel no hace lo que debería hacer.
Después de analizar las posibles causas del error, te das cuenta de que el problema se debe a que los usuarios no habilitan las macros al abrir el archivo y por lo tanto toda la funcionalidad programada es inútil ya que Excel no ejecutará el código a menos que el usuario pulse el botón Habilitar contenido.
Si el usuario no realiza dicha acción todas tus macros quedarán inhabilitadas por Excel y todo el código, en el que has puesto tanto empeño, dejará de funcionar. ¿Existe alguna manera para forzar la ejecución de las macros en Excel? La respuesta es sí, y a continuación revisaremos tres alternativas diferentes para lograrlo.
La primera opción la he incluido en este artículo para que estés enterado de dicha alternativa pero no la recomiendo en lo absoluto y en seguida explico por qué.
Habilitar todas las macros en Excel
Excel nos permite modificar la configuración de macros para permitir la ejecución de cualquier código sin mostrar notificación alguna. Dicha configuración se encuentra en Archivo > Opciones > Centro de confianza > Configuración del Centro de confianza > Configuración de macros.
También puedes abrir este cuadro de diálogo desde la pestaña Desarrollador > Código > Seguridad de macros. Con este cambio Excel ejecutará automáticamente el código de cualquier archivo incluyendo el tuyo, pero esa es precisamente la desventaja de este método, ya que dejará vulnerable el equipo para la ejecución de cualquier código malicioso proveniente de otros archivos.
Además, si el usuario sabe cómo cambiar dicha configuración en Excel, podrá regresar al nivel de seguridad que desee y las macros dejarán de ejecutarse automáticamente.
Crear una ubicación de confianza
Es importante recordar que Excel aplica las reglas de seguridad de macros a todas las carpetas del equipo excepto aquellas que están en el catálogo de Ubicaciones de confianza. Si otorgas el privilegio de “confianza” a una carpeta, entonces Excel ejecutará automáticamente las macros de todos los archivos contenidos en dicha carpeta.
Para agregar una carpeta a las ubicaciones de confianza debes abrir el mismo cuadro de diálogo Centro de confianza de la sección anterior pero en esta ocasión deberás ir a la sección Ubicaciones de confianza.
Deberás pulsar el botón Agregar nueva ubicación y en el cuadro de diálogo mostrado deberás indicar la ruta de acceso a la carpeta que contendrá los archivos de Excel que contienen las macros. Siempre que se abra un archivo de Excel ubicado en dicha carpeta, se ejecutarán las macros sin que el usuario tenga que autorizar su ejecución.
Este método tiene dos desventajas, la primera es que el usuario mueva o coloque el archivo Excel en otra carpeta y por lo tanto las macros dejarán de ejecutarse automáticamente. La otra desventaja es que el usuario puede remover la carpeta de la lista de Ubicaciones de confianza ya no se ejecutarán automáticamente las macros.
Como puedes ver, estas opciones facilitan la ejecución de las macros pero de ninguna manera podrán forzar al usuario a hacerlo. En cualquier momento se puede revertir la configuración realizada y las macros dejarán de funcionar.
Obligar la habilitación de macros
El último método que voy a mostrar es una alternativa conocida desde hace tiempo entre los programadores de Excel. Dicha alternativa se basa en una idea muy simple: Tu libro de trabajo debe tener todas las hojas ocultas y solo una de ellas estará visible al momento de abrir el archivo. Esa hoja visible deberá recordar al usuario que debe habilitar las macros.
Una vez que el usuario habilite las macros, se ejecutará el código que mostrará todas las hojas que estaban ocultas. Si el usuario no habilita las macros, lo único que observará será la hoja con la instrucción anterior.
Para lograr nuestro objetivo necesitaremos dos macros: una que se encargará de ocultar todas las hojas al momento de cerrar el archivo y otra macro que mostrará todas las hojas al momento de abrir el archivo y habilitar las macros. El evento que ejecutará nuestro código al abrir el archivo será el evento Open y el evento que ejecutará el código al cerrar el archivo será el evento BeforeClose. Ambos eventos pertenecen al objeto Workbook.
Parar crear las macros pulsamos la combinación de teclas ALT+F11 para abrir el Editor de Visual Basic y en el panel izquierdo hacemos doble clic en el objeto ThisWorkbook.
La primera macro corresponde al evento Open, así que nos aseguramos de seleccionar la opción Workbook en la primera lista desplegable y la opción Open en la segunda lista desplegable. Posteriormente colocamos el siguiente código VBA:
Private Sub Workbook_Open() For Each ws In ThisWorkbook.Worksheets ws.Visible = xlSheetVisible Next ws Sheets("Inicio").Visible = xlVeryHidden End Sub
El bucle For-Next se encarga de recorrer todas las hojas del libro y hacerlas visibles y finalmente ocultamos la hoja Inicio la cual tiene el texto con la instrucción para habilitar las macros. De esta manera, al momento de habilitar las macros se ejecutará el evento Open y se mostrarán las hojas del libro al usuario.
Ahora debemos asegurarnos de ocultar las hojas al momento que el usuario cierre Excel y para eso debemos agregar el evento BeforeClose con el siguiente código:
Private Sub Workbook_BeforeClose(Cancel As Boolean) Sheets("Inicio").Visible = xlSheetVisible For Each ws In ThisWorkbook.Worksheets If ws.Name <> "Inicio" Then ws.Visible = xlVeryHidden End If Next ws ActiveWorkbook.Save End Sub
En este caso comenzamos la macro haciendo visible la hoja Inicio y posteriormente recorremos todas las hojas del libro con el bule For-Next para ocultaras. La instrucción IF, dentro del For-Next, nos sirve para evitar ocultar de nuevo la hoja Inicio. La última instrucción del evento guarda los cambios en el libro.
Una vez que hayas implementado ambas macros en tu libro, las hojas se mostrarán solamente si el usuario habilita las macros y de esa manera estarás forzando el uso de las macros en Excel.
Descarga el archivo de trabajo que contiene el código que hemos desarrollado en este artículo y colócalas en tus libros de Excel para obligar a los usuarios a habilitar las macros.