lunes, 23 de diciembre de 2013

VBA: personalizando el pié de página o Footer mediante programación en Excel.

Probablemente te hayas preguntado alguna vez si era posible incorporar el valor de una celda como parte del Pié de página (o del Encabezado)... Si lo has intentado alguna vez te habrás percatado que tal cosa no es posible desde la Configuración de página.
Explicaré hoy un sencillo procedimiento Sub (macro de Excel) que incorpora en el Footer (pié de página) el valor de una celda.

Para ello emplearemos el objeto .PageSetup y su propiedad .CenterFooter (podríamos haber optado por .LeftFooter o .RightFooter.. es decir, por cualquiera de las tres secciones del pié de página.. o sus variantes para el Encabezado: .CenterHeader, LeftHeader o RightHeader).

Igualmente controlaremos la comunicación con la impresora con la propiedad .PrintCommunication.


Añadiremos nuestro código asociándolo a un evento _BeforePrint del libro (ThisWorkbook); para ello accederemos a la ventana de código del explorador y buscaremos ThisWorkbook, donde insertaremos el siguiente código VBA:

Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim strFecha As String
'ejecutamos la macro Limpiar que elimina anteriores diseños del pié de página
Call Limpiar

'construimos el texto que aparecerá en el pié de página
strFecha = "Oferta válida hasta el: " & Format(Range("C1").Value + 30, "dd/mm/yyyy")

'controlamos la comunicación con la impresora
Application.PrintCommunication = False

'y par la hoja activa configuramos la sección central del pié de página
ActiveSheet.PageSetup.CenterFooter = strFecha
Application.PrintCommunication = True

End Sub



En un módulo a parte creamos la macro Limpiar:

Sub Limpiar()
Application.PrintCommunication = False
ActiveSheet.PageSetup.CenterFooter = " "
Application.PrintCommunication = True
End Sub



El resultado es el esperado, al ordenar la impresión de la hoja, actuará el evento _BeforePrint y ejecutará nuestro procedimiento, incorporando al pié de página el texto elegido. En el ejemplo, sumará 30 días a la fecha que aparezca en C1, dándole un formato de fecha.
Ojo, ya que los cambio se producirán justo antes de la impresión!!! (quizá no se visualicen en la vista preliminar).

VBA: personalizando el pié de página o Footer mediante programación en Excel.

4 comentarios:

  1. Buen post, pero hasta ahora no,he podido insertar una imagen o un gráfico de Excel en una plantilla de Word. He podido pasar info de las celdas, PERO SIN EL FORMATO.

    ResponderEliminar
    Respuestas
    1. Hola Armando,
      muchas gracias Armando...
      Respecto a la plantilla de Word, como te indicaba en el anterior comentario que escribiste, puedes enviarme el fichero a
      excelforo@gmail.com

      Un cordial saludo

      Eliminar
  2. Hola Ismael, esta macros es de muchas utilidad, pero quiero saber si en vez de colocar fecha, colocamos un texto, por ejemplo el nombre de una persona que cambia segun una lista desplegable, si me puedes ayudar, seria de mucha utilidad.

    ResponderEliminar
    Respuestas
    1. Hola,
      nosotros recuperamos el valor de la celda A1... y aplicamos formato de fecha.
      En tu pregunta sólo traeríamos el dato de la celda
      strFecha = "Usuario: " & Range("C1").Value

      Obviamente la celda C1 podría ser una celda validada, desplegando el listado de personas
      Saludos

      Eliminar