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.

13 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
  3. Saludos amigos, queiro hacer posible la numero en excel tanto en numero como en letras, es posible hacerlo, he estado tratando pero no he encontrado la forma

    ResponderEliminar
  4. Me ha servido de utilidad......pero por lo que veo imprime el mismo pie de pagina en todas la hojas de excel. Hay posibilidad de que imprima este pie de pagina solo para una hoja en cuestion.

    ResponderEliminar
    Respuestas
    1. Hola, que tal estás?
      Hasta donde yo sé, los pié de página en Excel solo permiten distinguir diferencias:
      1- entre la primer página y el resto
      2- entre pares e impares

      y diría no es posible imprimir un pié de página para solo una página diferente del resto.

      Un cordial saludo

      Eliminar
  5. Me gustaria saber si es posible insertar un pie de página, solo en una pagina de una hoja excedl

    ResponderEliminar
    Respuestas
    1. Hola, qué tal?
      un placer saludarte igualmente... espero te encuentres bien

      Con el estándar es posible solo en la primera página.
      Cualquier otra posibilidad debe ser con programación

      Un cordial saludo

      Eliminar
  6. Hola... tengo un macro que me crea un informe en word respecto a una hoja de calculo excel, pero no puedo cargar datos en el encabezado del word. mi codigo es:
    Sub toWord()
    'Ubicación y nombre de la plantilla
    'La ubicación está dada por la concatenación de los datos de dos celdas + la extensión del archivo de plantillas de Word.
    wArch = Range("F3").Text & Range("F2").Text & ".dotm"
    'Con la variable siguiente definimos que vamos a trabajar con un documento de Word.
    Set objWord = CreateObject("Word.Application")
    objWord.Visible = True
    'Creamos un documento nuevo con la plantilla
    objWord.documents.Add Template:=wArch, NewTemplate:=False, DocumentType:=0
    'Utilizamos For para recorrer todas las variables de 1 al dato de la celda C1.
    For i = 1 To Range("F1").Value 'celda dónde está la cuenta
    datos = Range("B" & i).Text 'dónde están los datos
    reemp = Range("c" & i).Text 'dónde están las etiquetas
    'utilizamos buscar y reemplazar de word
    With objWord.Selection.Find
    .Text = datos 'busca el texto de datos
    .Replacement.Text = reemp 'reemplaza por el texto
    .Execute Replace:=2 'la variable en dos es para reemplazar todos los valores
    End With
    Next i
    objWord.Activate 'Activa el documento de word
    End Sub

    Como podria implementar esto que usted explica?

    desde ya muchas gracias

    ResponderEliminar
    Respuestas
    1. Hola,
      el asunto es complejo y hay que recorrer diferentes secciones dentro del doc de word

      yo probaría grabando una macro EN el Word y ver el código que genera... a ver si se puede aprovechar

      En todo caso, trataré de subir lo antes posible un post explicando el caso

      Saludos

      Eliminar

Nota: solo los miembros de este blog pueden publicar comentarios.