Macro de evento para cambiar el encabezado de Excel - Consejos de Excel

Tabla de contenido

Donna de Missouri preguntó:

¿Tiene alguna idea de cómo puedo obtener la ruta donde se archivó el documento indicado en el encabezado o pie de página, o en cualquier parte del documento? Puedo obtener el nombre del archivo con & f pero no puedo averiguar cómo hacer la ruta.

En primer lugar, entiendo que Microsoft ha agregado esta funcionalidad a Excel XP y les felicito, ya que es un problema frecuente. Cualquier lector que ya haya actualizado a Office XP no necesitará las técnicas del consejo de esta semana para resolver este problema, pero aún así será útil para resolver otros problemas.

La solución a esta sugerencia es un tipo especial de macro llamada macro de controlador de eventos. Vamos a tomar brevemente el control de Excel cada vez que esté a punto de imprimir nuestro libro de trabajo y agregar la ruta actual al encabezado.

Muchos usuarios de Excel han incursionado en la grabación de macros simples. Las macros se almacenan en un módulo llamado Module1 o Module2 y pasan a formar parte de su proyecto. Hoy, voy a discutir las macros del controlador de eventos. Estas macros residen en un módulo de código especial que está asociado con cada hoja de trabajo o libro de trabajo.

Los consejos anteriores, como el de Introducir tiempo de Excel sin los dos puntos, se han ocupado del evento Worksheet_Change. El consejo de hoy requiere que agreguemos algo de código al evento BeforePrint del Libro de trabajo.

El código agregado a un evento se ejecutará siempre que ese evento sea "disparado". En este caso, cada vez que se imprime el libro de Excel, antes de que comience la impresión, Excel pasa el control al código VBA y permite que todo lo que pueda especificar en el código VBA suceda automáticamente antes de imprimir.

Asumiré que es nuevo en las macros de controladores de eventos. Voy a explicar exactamente cómo llegar al lugar correcto para ingresar esta macro.

Tengo un libro de trabajo llamado 'Tip055 Sample.xls'. Con el libro de trabajo cargado en Excel, presionaré alt = "" + F11 para comenzar con el editor visual básico. El aspecto predeterminado del editor es el que se muestra a la derecha. A la izquierda, normalmente verá un panel Proyecto apilado en la parte superior de un panel Propiedades. La mayor parte del lado derecho de la pantalla incluye un Panel de código. Si no tiene macros en su libro de trabajo, su panel de código será gris como se muestra a la derecha.

Agregué palabras de escritura en cursiva azul a la imagen para identificar los tres paneles; no los verá en su ejemplo.

Es importante que pueda ver el Panel de proyectos en el editor de VB. Si su vista del editor VB no incluye el panel del proyecto, presione Ctrl + R para ver el panel del proyecto. O haga clic en el icono de la barra de herramientas que se muestra a continuación:

El panel del proyecto mostrará un proyecto para cada libro de Excel abierto y cada complemento instalado. Haga clic en el signo más gris junto al nombre de su libro de trabajo para expandir el proyecto de su libro de trabajo. Luego, haga clic en el signo más gris junto a la carpeta Objetos de Microsoft Excel para expandir la carpeta del objeto. Ahora debería ver una entrada para cada hoja de trabajo y una entrada llamada ThisWorkbook.

Haga clic con el botón derecho en la entrada de ThisWorkbook y seleccione Ver código en el menú emergente.

Probablemente ahora tendrá un gran panel de código blanco en blanco que ocupa el lado derecho de la pantalla. Hay dos menús desplegables en la parte superior del panel de código que dirán (General) y (Declaraciones).

  • En el menú desplegable de la izquierda, seleccione Libro de trabajo.
  • El menú desplegable de la derecha ahora se completa con todos los eventos programables asociados con el libro de trabajo. Hay eventos aquí que ejecutarán código cada vez que se abra, active, desactive, etc. el libro de trabajo. Hoy queremos escribir código en el evento BeforePrint, así que seleccione BeforePrint en el menú desplegable de la derecha.

Tenga en cuenta que cada vez que selecciona algo del menú desplegable de la derecha, el editor de VBA escribe la línea de código inicial y final en el módulo de código por usted. La primera vez que cambia el menú desplegable de la izquierda a Libro de trabajo, probablemente recibió los inicios de una subrutina Workbook_Open por defecto. Si no va a escribir un procedimiento Workbook_Open, debería considerar eliminar este procedimiento vacío.

Ahora, a escribir el código VBA. Hay un par de variables útiles que puede utilizar.

  • ActiveWorkbook.Path devolverá la ruta del libro de trabajo. Podría verse como "C: Mis documentos MrExcel".
  • ActiveWorkbook.FullName devolverá la ruta y el nombre de archivo del libro. Podría verse como "C: Mis documentos MrExcel Tip055 Sample.xls".

Puede asignar esta variable para que sea una en una de las siguientes 6 posiciones:

Worksheets("Sheet1").PageSetup.LeftHeader = ActiveWorkbook.FullName Worksheets("Sheet1").PageSetup.CenterHeader = ActiveWorkbook.FullName Worksheets("Sheet1").PageSetup.RightHeader = ActiveWorkbook.FullName Worksheets("Sheet1").PageSetup.LeftFooter = ActiveWorkbook.FullName Worksheets("Sheet1").PageSetup.CenterFooter = ActiveWorkbook.FullName Worksheets("Sheet1").PageSetup.RightFooter = ActiveWorkbook.FullName

Aquí hay tres posibles macros de muestra.

Esta macro tendrá la ruta y el nombre de archivo agregados como el pie de página derecho de la hoja de trabajo activa:

Private Sub Workbook_BeforePrint(Cancel As Boolean) ActiveSheet.PageSetup.RightFooter = ActiveWorkbook.FullName End Sub

Esta macro tendrá la ruta agregada como el encabezado izquierdo de Sheet1 y como el pie de página central de Sheet2:

Private Sub Workbook_BeforePrint(Cancel As Boolean) Worksheets("Sheet1").PageSetup.LeftHeader = ActiveWorkbook.Path Worksheets("Sheet2").PageSetup.CenterFooter = ActiveWorkbook.Path End Sub

Si tiende a utilizar la opción "Libro de trabajo completo" al imprimir, esta versión agregará el nombre completo como pie de página central a todas las hojas:

Private Sub Workbook_BeforePrint(Cancel As Boolean) For Each Sh In ActiveWorkbook.Worksheets Sh.PageSetup.CenterFooter = ActiveWorkbook.FullName Next Sh End Sub

Siga uno de estos ejemplos o cree uno propio. Cuando haya terminado, cierre el editor de VBA con Archivo> Cerrar y volver a Microsoft Excel.

Cada vez que imprima una hoja de trabajo, el código se ejecutará e insertará la ruta actual en el encabezado o pie de página correspondiente que indicó en el código VBA.

Algunas notas y precauciones:

  • Los usuarios novatos de Excel tendrán poca idea de que este código está en el libro de trabajo. Cuando abren el libro de trabajo, pueden recibir la advertencia de seguridad de que el archivo contiene macros, pero no habrá ninguna advertencia cuando el código VBA golpee lo que tenían como pie de página central y coloque el nombre de la ruta allí. Esto puede provocar acidez de estómago. Imagine que dentro de 5 años alguien está usando su libro de trabajo y el nuevo administrador quiere que el nombre del archivo se mueva del pie de página central al pie de página derecho. Esta persona puede saber que debe cambiar manualmente la configuración en Archivo> Configuración de página, pero si no saben que el código está allí, se volverá loco ya que el código cambia continuamente sus pies de página.

    It is really unlikely that they will be able to find your code module, but just in case they do, you might want to leave a comment in the code module that directs them back to this website for an explanation.

    You also might want to add a comment to cell A1 reminding yourself that there is an event handler set up to change the print headers.

  • There is a setting within VBA which prevents events from running. If your macro suddenly stops working, t is common to find that something within VBA has turned this setting to prevent the events from running. The common scenario is that a programmer starts a macro with:

    Application.EnableEvents = False '… macro here… Application.EnableEvents = True

    Cuando ocurre un error en la macro, los eventos nunca se vuelven a activar. Cuando esto sucede, hay poca advertencia. Si sospecha que sus controladores de eventos no se están ejecutando, vaya al editor visual básico. Presione Ctrl + g para abrir un panel inmediato. En el panel inmediato, escriba:

    Print Application.EnableEvents

    y presione enter. Si encuentra que está establecido en False, escriba la siguiente línea en el panel inmediato:

    Application.EnableEvents = True

    y presione enter.

Gracias a Donna por una gran pregunta. En el proceso de explicar la respuesta, fue una gran oportunidad para expandir el concepto de Event Handlers en VBA.

Articulos interesantes...