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:
En un módulo a parte creamos la macro Limpiar:
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).
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).
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.
ResponderEliminarHola Armando,
Eliminarmuchas 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
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.
ResponderEliminarHola,
Eliminarnosotros 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
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
ResponderEliminarHola,
Eliminarecha un vistazo a esta macro
http://excelforo.blogspot.com.es/2011/11/udf-para-convertir-numeros-en-letras.html
Saludos
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.
ResponderEliminarHola, que tal estás?
EliminarHasta 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
Muchas gracias
EliminarMe gustaria saber si es posible insertar un pie de página, solo en una pagina de una hoja excedl
ResponderEliminarHola, qué tal?
Eliminarun 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
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:
ResponderEliminarSub 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
Hola,
Eliminarel 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