Cómo Ejecutar una Macro en Excel
Aunque ejecutar una macro en Excel no es difícil, hay muchas maneras de ejecutarlas. Algunas formas están pensadas para facilitar el uso de las macros, mientras que otras pueden cambiar por completo la forma en que un usuario interactúa con su libro de trabajo. En este artículo cubriremos algunas formas obvias de ejecutar macros como la Lista de Macros y los controles de Botón, y algunas formas más oscuras como el Editor VB y los Eventos.
Primero: Asegúrese de que las Macros Están Habilitadas
Las características de seguridad de Excel deshabilitan las macros por defecto. Al abrir un libro de trabajo con macros habilitadas, normalmente se pregunta a los usuarios si desean habilitarlas. Si no puedes ejecutar las macros, intenta seguir estas instrucciones:
- Guardar el libro de trabajo
- Cierre el libro de trabajo y vuelva a abrirlo
- Cuando el libro de trabajo se cargue, verá un aviso de advertencia de seguridad (en la imagen de abajo). Haga clic en Habilitar contenido.
Ejecutar una Macro Desde la Lista de Macros
Se puede acceder a una lista de macros desde la pestaña Ver. Para ver esta lista:
- Seleccione la pestaña Vista
- Haga clic en el botón denominado Macros para que aparezca la lista de macros
- Seleccione la macro que desea ejecutar de la lista y haga clic en el botón Ejecutar
También puede mostrar la lista de macros en cualquier momento pulsando ALT+F8.
Ejecutar una Macro con un Atajo de Teclado
Puede asignar un atajo de teclado a una macro que utilice a menudo, en forma de CTRL+<letra> o CTRL+SHIFT+<letra>. Para ello:
- Abra la lista de macros(Ver > Macros, o ALT+F8)
- Seleccione la macro a la que desea aplicar un acceso directo
- Haga clic en Opciones… para mostrar el subdiálogo Opciones de macro
- En el cuadro de texto que aparece debajo de Tecla de acceso directo, escriba una sola letra y haga clic en Aceptar. Si mantienes pulsada la tecla MAYÚSCULAS mientras escribes la letra, la etiqueta junto a la caja mostrará MAYÚSCULAS como parte del atajo.
NOTA: ¡se recomienda encarecidamente utilizar MAYÚSCULAS al crear un atajo de teclado! Excel utiliza los atajos CTRL+ para sí mismo, por ejemplo, CTRL+C para copiar, o CTRL+V para guardar. Si creas un atajo de macro usando estos u otros atajos de Excel, sobreescribirás el atajo de Excel hasta que reasignes el atajo de macro.
Ejecutar una Macro Desde el Editor VB
Las macros también pueden ejecutarse desde el Editor VB. El Editor VB le permite revisar el código de una macro y hacer los cambios que desee antes de ejecutarla. Para ejecutar una macro en el Editor VB:
- Abra el Editor VB (pestaña Desarrollador > Visual Basic, o ALT+F11)
- En la ventana Proyecto, haga doble clic en el módulo que contiene la macro que desea probar
- En la ventana de código del módulo, coloque el cursor en cualquier lugar del código de la macro entre «Sub» y «End Sub»
- Haga clic en el botón Ejecutar de la barra de herramientas, o pulse el atajo de teclado F5
Ejecutar una Macro Utilizando un Botón o Una Forma
A menudo es útil tener un control en la hoja de trabajo en el que el usuario pueda hacer clic para ejecutar una macro, como un control de botón o una forma. Esto es mucho más rápido para los usuarios finales que abrir listas de macros o escarbar en el código de la macro en el Editor VB.
Puede encontrar información sobre cómo crear un botón o una forma en la que se pueda hacer clic aquí: Añadir un botón y asignar una macro en Excel.
Ejecutar Automáticamente una Macro Utilizando Eventos en VBA
Es posible hacer que una macro se ejecute cuando sucede algo en Excel – por ejemplo, cuando se abre un libro o cuando se cambia el valor de una celda. Esto se llama Eventos, y puedes escribir código VBA para ellos para llamar a las macros o realizar otras operaciones.
Para escribir código para un evento, tendrás que utilizar el Editor VB. Por ejemplo, para ver los eventos del libro de trabajo:
- Abra el Editor VB (ALT+F11)
- Haga doble clic en el objeto ThisWorkbook en la ventana de proyecto del editor VB
- Elija «Workbook» en el menú desplegable de la parte superior izquierda de la ventana de código
- Haz clic en el desplegable de la derecha para ver una lista de eventos
Los siguientes son una pequeña, pero útil muestra de eventos de Excel desde los que podría ejecutar macros.
Workbook_Open()
El evento Workbook_Open() se dispara cuando se abre un libro. Si obtiene la Advertencia de Seguridad después de abrir un libro, este evento se dispara después de hacer clic en «Habilitar Contenido».
Private Sub Workbook_Open()
MsgBox "Libro de trabajo abierto"
End Sub
Workbook_BeforeClose(Cancel as Boolean)
Workbook_BeforeClose() se dispara cuando el usuario intenta cerrar el libro de trabajo. Ocurre antes de que se realice cualquier comprobación para ver si el libro de trabajo necesita ser guardado.
El parámetro Cancel se puede establecer como True para evitar que el libro se cierre.
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If MsgBox("Estás seguro?", vbYesNo + vbQuestion, "Cerrar") = vbNo Then
Cancel = True
End If
End Sub
Worksheet_Change(ByVal Target As Range)
Worksheet_Change() se ejecuta cuando se cambia el valor de una celda, ya sea por una macro, por una operación de copiar/pegar o por un enlace externo. Sin embargo, no se dispara cuando se recalcula un valor mediante una fórmula.
El parámetro Target representa las celdas cuyo valor ha cambiado.
Si cambia el valor de otras celdas dentro de este evento, el evento se disparará de nuevo. Esto puede causar un bucle infinito. Si necesita cambiar los valores de las celdas sin disparar este evento, considere establecer Application.EnableEvents a False primero, y luego establecerlo de nuevo a True al final del procedimiento del evento.
Private Sub Worksheet_Change(ByVal Target As Range)
MsgBox "Celdas Cambiadas: " & Target.Address
Application.EnableEvents = False
Range("A2").Value = Range("A2").Value + Target.Cells.Count
Application.EnableEvents = True
End Sub
Worksheet_SelectionChange(ByVal Target As Range)
Este evento se dispara cada vez que se seleccionan diferentes celdas con el retículo de selección. El parámetro Target representa las nuevas celdas que han sido seleccionadas.
También puede disparar este evento con código, por ejemplo «Range(«A1″).Select». Al igual que con Worksheet_Change(), debe tener cuidado al seleccionar otras celdas dentro de este evento, ya que puede provocar un bucle infinito. Utilice Application.EnableEvents.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$A$1" Then
MsgBox "Cursor en posición de Inicio"
End If
End Sub
Detener una Macro en Ejecución
Una macro en ejecución puede interrumpirse pulsando ESC o CTRL+BREAK. Por defecto, una macro interrumpida mostrará el siguiente diálogo:
Al hacer clic en Finalizar se detendrá la macro, mientras que Continuar la reanudará. Al hacer clic en Depurar se abrirá la macro en el Editor VB y se enfocará la línea de código en la que se detuvo la ejecución. (Dentro del Editor VB puede detener o reanudar la macro utilizando los botones Ejecutar o Finalizar de la barra de herramientas)
Application.EnableCancelKey
Puedes desactivar la posibilidad de detener una macro con ESC o CTRL+BREAK estableciendo la propiedad Application .EnableCancelKey. Esta propiedad tiene tres valores posibles:
- xlInterrupt – este es el valor por defecto, que hace que Excel muestre el diálogo anterior
- xlDisabled – elimina la capacidad de detener una macro en ejecución
- xlErrorHandler – cuando se hace un intento de interrupción, se lanza un error que puede ser manejado en código
Cada vez que se detiene la ejecución del código, Excel siempre restablece el valor de Application.EnableCancelKey a xlInterrupt.
Una buena razón para utilizar esta propiedad es la seguridad. Por ejemplo, si tuviera una macro que desprotegiera temporalmente partes de su libro, un usuario podría potencialmente detener la macro justo después de la desprotección y obtener acceso al contenido que usted no quería que tuviera. Estableciendo Application.EnableCancelKey, puede deshabilitar completamente su capacidad de hacer esto, o manejar su interrupción con gracia con un manejador de errores que vuelva a proteger el libro de trabajo.
Sub UpdateBaseData(ByVal NewData As Range, ByVal Target As Range)
Application.EnableCancelKey = xlDisabled
Target.Worksheet.Unprotect "MyPassword"
NewData.Copy Target
Target.Worksheet.Protect "MyPassword"
Application.EnableCancelKey = xlInterrupt
End Sub
Forzar el Cierre de Excel con el Administrador de Tareas de Windows
Si la macro se ha «colgado», o Excel está demasiado ocupado para reconocer un intento de interrupción, es posible que tenga que forzar el cierre del propio Excel con el Administrador de Tareas de Windows. (NOTA: si haces esto, puedes perder cualquier trabajo no guardado, y tener que depender de una versión de recuperación automática de tu libro)
- Abra el Administrador de Tareas directamente usando CTRL+SHIFT+ESC
- Seleccione la pestaña «Procesos«
- Expanda el elemento «Microsoft Excel» para mostrar todos los libros de trabajo
- Seleccione el libro de trabajo que desea cerrar y haga clic en Finalizar tarea en la esquina inferior derecha