martes, 19 de diciembre de 2017

VBA: Insertar rango de celdas en pie de página

Hoy responderemos la cuestión planteada por un lector, donde preguntaba si existía alguna manera de llevar un rango de celdas al Encabezado o al Pie de página...
Vaya por delante que no hay una forma simple, y que no es posible trasladar un rango como tal... pero sí sería posible trasladar una imagen a ese encabezado pie de página.
Y ese es el trabajo de hoy. Construiremos una macro que capture el rango de celdas con el contenido a incluir como pie de página,
para cargar dicha imagen posteriormente en nuestro pie de página personalizado. Por último eliminaremos la imagen generada...


Este proceso es similar al expuesto en este post.
En él insertamos la captura de imagen dentro de un gráfico vacío, sin datos, para luego emplear el método de exportación de gráfico como imagen.
Imagen que luego será la que cargaremos en el Footer (pie de pagina), mediante la propiedad:
.CenterFooterPicture.Filename = Ruta_de_la_imagen


Nuestra macro añadida dentro de un módulo estándar de nuestro proyecto de VB:

Sub LlevarRangoaPiePagina()
Dim Ruta As String
Dim VistaOriginal As Long

'declaramos el objeto de la hoja sobre la que trabajamos
Set Sh = ThisWorkbook.Sheets("Hoja_Imagenes")

'guardamos la vista actual (normal, diseño de página o salto de página)
VistaOriginal = Windows(ThisWorkbook.Name).View         'ActiveWindow.View
'cambiamos la vista a normal...
'para evitar la posibilida que aparezca el texto 'Página N" en la imagen que crearemos
Windows(ThisWorkbook.Name).View = xlNormalView          'ActiveWindow.View = xlNormalView

'definimos la ruta de la imagen temporal...
Ruta = "E:\excelforo\TEMP.png"

'Exportaremos el área de acuerdo a un escalado adecuado
'proporcionandolo por el zoom existente
Dim coef As Double
coef = CDbl(100 / Windows(ThisWorkbook.Name).Zoom)
'determinamos el área para generar la imagen
Dim RngImg As Range
Set RngImg = Sh.Range("A1:F2")

'copiamos el área
RngImg.CopyPicture Appearance:=xlScreen, Format:=xlPicture

'creamos un gráfico donde incorporar la imagen
'dando unas dimensiones y posición adecuadas...
'ChartObjects.Add(izquierda, arriba, ancho, alto)
Set chartobj = Sh.ChartObjects.Add(0, 30, RngImg.Width * coef, RngImg.Height * coef)

'copiamos el área
RngImg.CopyPicture Appearance:=xlScreen, Format:=xlPicture

'en el cual pegamos el rango guardado como imagen (tal cual se ve en pantalla)
chartobj.Activate
ActiveChart.Paste

'y exportamos dicho gráfico como png
chartobj.Chart.Export Ruta, "png"

'Recuperamos el tipo de vista que teníamos al inicio
Windows(ThisWorkbook.Name).View = VistaOriginal

'configuramos el pié de página para la hoja activa
With Sh.PageSetup
    .CenterFooter = ""    'eliminamos cualquier configuración previa
    .CenterFooter = "&G"    'habilita la vista de la imagen cargada
    .CenterFooterPicture.Filename = Ruta        'indicamos la ruta de la imagen temporal guardada
    'dimensionamos alto y ancho de la imagen en el pié de página
    .CenterFooterPicture.Height = 275
    .CenterFooterPicture.Width = 200
End With

'finalmente eliminamos el gráfico creado
chartobj.Delete
'eliminamos la imagen temporal
Kill Ruta

End Sub



Importante no olvidar incluir la linea de configuración de página:
.CenterFooter = "&G"
que habilita la vista de la imagen cargada!!!


tras lanzar la macro comprobaremos en nuestra vista previa que el rango (en modo imagen) queda visible en la impresión:

VBA: Insertar rango de celdas en pie de página

No hay comentarios:

Publicar un comentario