🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

VBA Page Setup en Excel — área de impresión, ajuste a página y orientación

|

VBA Page Setup en Excel — área de impresión, ajuste a página y orientación

TL;DR — Worksheet.PageSetup define la página: qué contiene (PrintArea), hacia dónde mira (Orientation), cómo se escala (Zoom o FitToPagesWide/FitToPagesTall), sus márgenes, las filas de título que se repiten, y su encabezado y pie de página. Tanto PrintOut como Save as PDF generan estas páginas, así que aquí es donde se arreglan los problemas de diseño. La regla que hace tropezar a todo el mundo: el ajuste a página solo funciona después de poner .Zoom = False.

Sub SetUpReportPage()
    With Worksheets("Report").PageSetup
        .PrintArea = "$A$1:$H$60"
        .Orientation = xlLandscape
        .Zoom = False              ' obligatorio, o las dos lineas siguientes se ignoran
        .FitToPagesWide = 1
        .FitToPagesTall = False    ' tantas paginas de alto como necesiten los datos
        .PrintTitleRows = "$1:$2"
    End With
End Sub

Esta es la base de una serie de tres artículos sobre cómo sacar resultados de Excel. PageSetup, que es lo que vemos aquí, decide qué es una página. PrintOut envía esas páginas a una impresora, y ExportAsFixedFormat envía esas mismas páginas a un PDF. Los comandos de salida ocupan una línea cada uno; el trabajo de verdad está en la página. Cuando una impresión o un PDF sale mal, el arreglo casi siempre está aquí, no en el comando que lo produjo.

Lo que aprenderás

  • Por qué la definición de página controla tanto el papel como el PDF
  • Fijar y borrar el área de impresión, también a partir de un Range
  • Orientación, tamaño del papel y centrado
  • Escala: Zoom frente a ajustar a páginas, y la regla que los une
  • Repetir filas de título, y encabezados y pies de página con números de página
  • Márgenes en pulgadas o en centímetros
  • Acelerar la configuración de página con PrintCommunication

El modelo mental: la página es el producto

Cuando Excel imprime o exporta, no imprime una tabla — corta la hoja en páginas y saca esas páginas. PageSetup guarda todas las reglas de ese corte: el área que se incluye, el papel, la dirección, la escala, los márgenes y lo que se repite en cada página. PrintOut y ExportAsFixedFormat son solo dos destinos para el resultado. Así que piensa en la configuración de página como el producto y en el comando de salida como la entrega. Una macro de informe que fija la página de forma explícita produce el mismo resultado en cualquier equipo; una que depende de lo que se quedó configurado la última vez, no.

El área de impresión

PrintArea es una cadena que contiene una dirección en estilo A1, no un Range. Para fijarla a partir de un rango, pasa el Address del rango:

Dim ws As Worksheet
Set ws = Worksheets("Report")
ws.PageSetup.PrintArea = ws.Range("A1").CurrentRegion.Address   ' el bloque de datos
ws.PageSetup.PrintArea = ""                                     ' borrarla: imprimir todo

Fijarla a partir de CurrentRegion o de la última fila es la forma de que un informe imprima exactamente sus datos, tenga las filas que tenga este mes. Borrarla con una cadena vacía es igual de importante: un área de impresión que sobró de una ejecución anterior recorta en silencio el siguiente informe.

Orientación, tamaño del papel y centrado

With ws.PageSetup
    .Orientation = xlLandscape         ' o xlPortrait
    .PaperSize = xlPaperA4             ' o xlPaperLetter
    .CenterHorizontally = True
End With

PaperSize depende de lo que admita el controlador de la impresora; un tamaño que la impresora no tiene provoca un error. Para un libro que va tanto a Europa como a Estados Unidos, fíjalo a propósito en lugar de darlo por supuesto.

Escala: Zoom frente a ajustar a páginas

Hay dos formas de escalar, y son mutuamente excluyentes. Zoom es un porcentaje de 10 a 400. FitToPagesWide y FitToPagesTall dejan que Excel elija la escala para encajar en un número de páginas. Excel solo usa los ajustes de encaje cuando Zoom es False — mientras Zoom tenga un número, se ignoran sin avisar. Por eso tantas macros de «ajustar a una página» no hacen nada:

With ws.PageSetup
    .Zoom = False
    .FitToPagesWide = 1        ' todas las columnas en una pagina de ancho
    .FitToPagesTall = False    ' las filas ocupan tantas paginas como haga falta
End With

FitToPagesWide = 1 con FitToPagesTall = False es lo que quieren la mayoría de los informes: no partir nunca las columnas y dejar que las filas fluyan. Poner los dos a 1 lo aprieta todo en una sola página, lo cual está bien para un resumen y resulta ilegible para una lista larga.

Filas de título, encabezados y pies de página

PrintTitleRows repite filas de encabezado en la parte superior de cada página; recibe una dirección de filas como cadena. Los encabezados y pies de página reciben texto con códigos: &P es el número de página, &N el total de páginas, &D la fecha y &A el nombre de la hoja.

With ws.PageSetup
    .PrintTitleRows = "$1:$2"
    .CenterFooter = "Page &P of &N"
    .RightHeader = "&A - printed &D"
End With

Como & inicia un código, un ampersand literal en el texto de un encabezado tiene que ir duplicado: "R&&D Report" se imprime como R&D Report.

Márgenes en pulgadas o en centímetros

Los márgenes se miden en puntos, no en pulgadas. Convierte con Application.InchesToPoints o Application.CentimetersToPoints:

With ws.PageSetup
    .LeftMargin = Application.CentimetersToPoints(1.5)
    .RightMargin = Application.CentimetersToPoints(1.5)
    .TopMargin = Application.InchesToPoints(0.75)
End With

Escribir .LeftMargin = 1 fija un margen de un punto — más o menos un tercio de milímetro —, que es una razón habitual de que una impresión de repente llegue hasta el borde del papel.

Acelerar la configuración de página con PrintCommunication

Cada asignación de PageSetup habla con el controlador de la impresora, así que un bloque de diez ajustes puede tardar segundos, y más aún en un bucle sobre muchas hojas. Corta esa conversación mientras configuras y vuelve a activarla al terminar:

Application.PrintCommunication = False
With ws.PageSetup
    .Orientation = xlLandscape
    .Zoom = False
    .FitToPagesWide = 1
    .FitToPagesTall = False
End With
Application.PrintCommunication = True      ' aplica los ajustes acumulados

Vuelve a activarla siempre — los ajustes solo se confirman cuando regresa a True. La misma lógica se aplica a ScreenUpdating: impide que Excel haga trabajo que no necesitas mientras se ejecuta la macro.

Cómo te ayuda ExcelMaster

La configuración de página es donde las macros de informes fallan en silencio: un Zoom que desactiva sin avisar el ajuste a página, un margen puesto en puntos en lugar de centímetros, un área de impresión que sobró del mes pasado, un pie de página con un ampersand que desaparece. Nada de esto da error — el informe simplemente sale mal, en papel o en PDF.

ExcelMaster te deja describir la página — «A4 en horizontal, una página de ancho, repetir las dos primeras filas, números de página en el pie» — y escribe el bloque PageSetup completo con la regla del zoom, la conversión de unidades y el modo rápido resueltos, y luego muestra una vista previa de las páginas para que veas el diseño antes de imprimir o exportar nada.

Preguntas frecuentes

¿Cómo fijo el área de impresión en VBA?

Asigna una cadena con la dirección a PageSetup.PrintArea, por ejemplo Worksheets("Report").PageSetup.PrintArea = "$A$1:$H$60". Para usar un rango, pasa su Address: .PrintArea = Range("A1").CurrentRegion.Address. Ponla a "" para borrar el área de impresión e imprimir la hoja entera.

¿Por qué no funciona FitToPagesWide?

Porque Zoom todavía tiene un porcentaje. Excel ignora FitToPagesWide y FitToPagesTall salvo que PageSetup.Zoom = False. Pon primero Zoom a False y después los ajustes de encaje, normalmente FitToPagesWide = 1 y FitToPagesTall = False.

¿Cómo pongo la orientación horizontal en VBA?

Usa Worksheets("Report").PageSetup.Orientation = xlLandscape. Usa xlPortrait para volver a vertical. El ajuste se aplica tanto a la impresión como a la exportación a PDF, porque las dos generan la configuración de página de la hoja.

¿Cómo repito las filas de encabezado en cada página impresa?

Asigna a PageSetup.PrintTitleRows una cadena con la dirección de las filas, por ejemplo "$1:$2" para repetir las filas 1 y 2. Para repetir columnas a la izquierda de cada página, usa PrintTitleColumns con una dirección de columnas como "$A:$A".

¿Por qué mi macro de PageSetup es tan lenta?

Cada propiedad de PageSetup habla con el controlador de la impresora. Envuelve los ajustes entre Application.PrintCommunication = False y Application.PrintCommunication = True; así Excel los aplica en un solo lote. Acuérdate de volver a ponerla a True, o los ajustes no se confirman.

Probado en

Probado en: Excel 365 (Windows 11), VBA 7.1 — última verificación el 29/09/2026.

Guías relacionadas: VBA Save as PDF · VBA PrintOut · VBA CurrentRegion · VBA Last Row · VBA Used Range · VBA ScreenUpdating · VBA Workbook BeforePrint