Macro VBA configura hoja Excel





Un sin número de veces configuramos una página de la misma forma para que quede bien la impresión en la hoja, es muy valioso el tiempo invertido en ello, es por eso que hoy te muestro una forma de configurar mediante macro una hoja de Excel, con el objeto que quede la hoja lista para la impresión sin perder tiempo en algo repetitivo y rutinario, en el post muestro como seleccionar otra impresora distinta a la activa e imprimir.

Antes de seguir recomiendo leer un excelente libro sobre Excel que te ayudará operar las planillas u hojas de cálculo, haz click acá, si quieres aprender sobre Excel, en inglés, entonces debes hacer click here. Si lo que necesitas es aprender o profundizar sobre la programación de macros con VBA este es unos de los mejores cursos on line que he visto en internet.

  

Adentrándonos en el ejemplo mostrado, será más fácil de comprender la codificación si descargas el ejemplo y revisas el código paso a paso para ir viendo el resultado, desde el link del final podrás descargar el ejemplo sin ningún tipo de restricción.

Presionando el botón se ejecutará un procedimiento cuyo objetivo es configurar la hoja de Excel mediante macro de VBA, si bien en el ejemplo y por un fin didáctico se incluyen todos los códigos, no es necesario escribirlos a todos, solo los que necesitemos para dejar nuestra hoja configurada es suficiente.

Seguidamente explico código por código que hace cada uno de ellos:

Este código se debe colocar por una cuestión de celeridad ya que de lo contrarío la configuración de la hoja se vuelve lenta, lo que hace es cortar la comunicación con la impresora, luego de establecer todos los códigos necesarios se debe volver a establecer la comunicación con la impresora.
Application.PrintCommunication = False
Application.PrintCommunication = True.


Este código permite repetir la primer fila o fila que queramos en todas las hojas, en este caso se repiten la fila 1 y 2 en todas las hojas que se impriman.
.PrintTitleRows = "$1:$2"


Este código permite repetir la columna o columnas que queramos en todas las hojas, en este caso se repiten la columna A y B en todas las hojas que se impriman.
.PrintTitleColumns = "$A:$B"


Este código nos permite establecer el área de impresión, en este caso se imprimirá en rango A1:I20
.PrintArea = "$A$1:$I$20"


Establece el encabezado a la izquierda de la página agregando en el encabezado el número de la pagina y el total de páginas como por ejemplo "1 de 16".
.LeftHeader = "&P&N"


El siguiente código centra el encabezado, en este caso en el no hay ningún texto, pero si quisiéramos escribir algo en el encabezado debemos hacerlo entre las comillas, esto es válido para todo código que maneje encabezado y pie de página, en el también podemos colocar una imagen.
.CenterHeader = ""


En el caso que queramos insertar una imagen en el encabezado o pie de página se debe usar el siguiente código, tener presente que entre las comillas va la dirección o path del archivo de imagen.
.CenterHeaderPicture.Filename"C:\User\MyNotebook\Pictures\Iconos\actualizar6.jpg"


Establece el encabezado a la derecha de la página en blanco
.RightHeader = ""


Establece el pie de pagina a la izquierda de la página, en este caso esta en blanco. 
.LeftFooter = ""


Establece el pie de pagina centrado en la página, en este caso contiene un encabezado que dice "Página x ", donde x es el números de página actual del total de páginas del documento. .CenterFooter = "Página &P"


Establece el pie de pagina a la derecha de la página, en este caso el encabezado no tiene nada escrito, pero en caso que se desee debe ir escrito entre las comillas. 
.RightFooter = ""


Los siguientes códigos establecen en pulgadas los margenes izquierdo, derecho, superior, inferior, margen encabezado página y margen pie de página, los códigos se presentan en el orden que se nombran.
.LeftMargin = Application.InchesToPoints(0.708661417322835)
.RightMargin = Application.InchesToPoints(0.708661417322835)
.TopMargin = Application.InchesToPoints(0.748031496062992)
.BottomMargin = Application.InchesToPoints(0.748031496062992)
.HeaderMargin = Application.InchesToPoints(0.31496062992126)
.FooterMargin = Application.InchesToPoints(0.31496062992126)


Los siguientes códigos establecen en centímetro los margenes izquierdo, derecho, superior, inferior, margen encabezado página y margen pie de página, los códigos se presentan en el orden que se nombran.
.LeftMargin = Application.CentimetersToPoints(1.5)
.RightMargin = Application.CentimetersToPoints(1.5)
.TopMargin = Application.CentimetersToPoints(1.5)
.BottomMargin = Application.CentimetersToPoints(1.5)
.HeaderMargin = Application.CentimetersToPoints(0.8)
.FooterMargin = Application.CentimetersToPoints(0.8)


Código que permite imprimir los encabezados, en este caso no imprime, False no imprime, True imprime. 
.PrintHeadings = False


Este código permite imprimir las líneas de división. 
.PrintGridlines = True


Código que establece que no se debe imprimir comentarios. 
.PrintComments = xlPrintNoComments


Con este código establecemos la calidad de impresión, en el ejemplo es igual a 600, pero pueden ser otros valores como 300, 1200, 2400, a mayor valor mayor calidad de impresión.
.PrintQuality = 600


Este código permite central horizontalmente, en este caso el valor es False, por ende no centrará horizontalmente. 
.CenterHorizontally = False


Este código permite central verticalmente, en este caso el valor es False, por ende no centrará verticalmente. 
.CenterVertically = False


Con este código establecemos la orientación  de la hoja, en este caso es vertical. 
.Orientation = xlPortrait


Con este código establecemos la orientación  de la hoja, en este caso es horizontal. 
.Orientation = xlLandscape


Este código nos permite establecer si deseamos o no que se imprima en calidad borrador. 
.Draft = False


Código que determina el primer número de página, en este caso es automático. pero puede ser 1,2 4 o el número que sea. 
.FirstPageNumber = xlAutomatic


Esta codificación permite determinar la dirección de impresión, en este caso imprime hacia abajo y luego derecha.
.Order = xlDownThenOver


Con este código establecemos la impresión en Banco y Negro. 
.BlackAndWhite = True


Código que permite ajustar a una página de ancho. 
.FitToPagesWide = 1


Código que permite ajustar a tres páginas de alto. 
.FitToPagesTall = 3


Si se utiliza zoom se puede disminuir o aumentar en un porcentaje x el tamaño de la hoja,  puede contener Zoom= False. 
.Zoom = 100


Establece si imprime errores. 
.PrintErrors = xlPrintErrorsDisplayed


Este código establece distintos encabezados y pie de páginas para las páginas pares e impares, en este caso es False,  por ende es el mismo para todas las hojas. 
.OddAndEvenPagesHeaderFooter = False


Este código determina que el primer encabezado y pie de página sea diferente.
.DifferentFirstPageHeaderFooter = False


Ajusta el encabezado y pie de página cuando se cambia de tamaño el documento.
.ScaleWithDocHeaderFooter = True


Alinea el encabezado y pie de página con los márgenes establecidos en las opciones de configuración.  
.AlignMarginsHeaderFooter = True


Los siguientes códigos aplican encabezado igual para todas las páginas y alinea a la izquierda, centro y derecha respectivamente. 
.EvenPage.LeftHeader.Text = ""
.EvenPage.CenterHeader.Text = ""
.EvenPage.RightHeader.Text = ""


Los siguientes códigos aplican pie de página igual para todas las páginas y alinea a la izquierda, centro y derecha respectivamente. 
.EvenPage.LeftFooter.Text = "" 
.EvenPage.CenterFooter.Text = ""  
.EvenPage.RightFooter.Text = ""


Los siguientes códigos aplican encabezado a la primer página solamente y alinea a la izquierda, centro y derecha respectivamente. 
.FirstPage.LeftHeader.Text = ""
.FirstPage.CenterHeader.Text = "" 
.FirstPage.RightHeader.Text = ""


Los siguientes códigos aplican encabezado a la primer página solamente y alinea a la izquierda, centro y derecha respectivamente.
.FirstPage.LeftFooter.Text = ""
.FirstPage.CenterFooter.Text = ""
.FirstPage.RightFooter.Text = ""


Este código vuelve a establecer los saltos de página.
ActiveSheet.ResetAllPageBreak

El vídeo que sigue muestra una explicación más detallada y gráfica de la macro presentada, recomiendo observar para una más fácil comprensión de la macro; suscribe a nuestra web desde la parte superior derecha de la página ingresando tu mail y a nuestro canal de You Tube para recibir en tu correo vídeos explicativos sobre macros interesantes, como  por ejemplo formulario que crea un listado de todas las hojas para poder luego seleccionarlasbuscar en listbox mientras escribes en textboxordenar hojas libro excel por su nombreconectar Excel con Access y muchos ejemplos más.






Con todos los códigos expuestos anteriormente puedes mediante macro de VBA configurar una hoja de Excel, descarga el ejemplo, abre el editor de texto ejecuta la macro y verás como se configura según lo expuesto en el código, para probar puedes ir cambiando valores de márgenes, cantidad de páginas de ancho, encabezados, pie de páginas, etc.


Código que se inserta en un módulo




Sub ConfigurarPágina()
'La propiedad a False es para acelerar la ejecución de código que establece PageSetup propiedades
' Verdadero, si la comunicación con la impresora está encendida; de lo contrario False
    Application.PrintCommunication = False
   
    With ActiveSheet.PageSetup
    'Repite la primer y segunda fila en todas las hojas
        .PrintTitleRows = "$1:$2"
    'Repite la columna A y B en todas las hojas
        .PrintTitleColumns = "$A:$B"
    End With
    Application.PrintCommunication = True
    'Establece área de impresión entre A1  e I20
    ActiveSheet.PageSetup.PrintArea = "$A$1:$I$20"
    Application.PrintCommunication = False
   
    With ActiveSheet.PageSetup
    'Establece el encabezado a la izquierda de la página como página x  de j páginas
        .LeftHeader = "&P&N"
    'Establece el encabezado centrado en la página en blanco
        .CenterHeader = ""
    'Establece el encabezado a la derecha de la página en blanco
        .RightHeader = ""
    'Establece el pie de pagina a la izquierda de la página en blanco
        .LeftFooter = ""
    'Establece el pie de pagina centrado en la página como página x  de j páginas
        .CenterFooter = "Página &P"
    'Establece el pie de pagina a la derecha de la página en blanco
        .RightFooter = ""
    'Establece el margen izquierdo en pulgadas
        .LeftMargin = Application.InchesToPoints(0.708661417322835)
    'Establece el margen derecho en pulgadas
        .RightMargin = Application.InchesToPoints(0.708661417322835)
    'Establece el margen superior en pulgadas
        .TopMargin = Application.InchesToPoints(0.748031496062992)
    'Establece el margen inferior en pulgadas
        .BottomMargin = Application.InchesToPoints(0.748031496062992)
    'Establece el margen del encabezado en pulgadas
        .HeaderMargin = Application.InchesToPoints(0.31496062992126)
    'Establece el margen del pie de páginas en pulgadas
        .FooterMargin = Application.InchesToPoints(0.31496062992126)
     'Establece el margen izquierdo en centimetros
        .LeftMargin = Application.CentimetersToPoints(1.5)
    'Establece el margen derecho en centimetros
        .RightMargin = Application.CentimetersToPoints(1.5)
    'Establece el margen superior en centimetros
        .TopMargin = Application.CentimetersToPoints(1.5)
    'Establece el margen inferior en centimetros
        .BottomMargin = Application.CentimetersToPoints(1.5)
    'Establece el margen del encabezado en centimetros
        .HeaderMargin = Application.CentimetersToPoints(0.8)
    'Establece el margen del pie de páginas en centimetros
        .FooterMargin = Application.CentimetersToPoints(0.8)
    'No imprime encabezados
        .PrintHeadings = False
    'Imprime líneas de división
        .PrintGridlines = True
    'No imprime líneas de división
        .PrintComments = xlPrintNoComments
    'Establece calidad de impresión puede ser 300, 1200, 2400
        .PrintQuality = 600
    'No centra horizontalmente
        .CenterHorizontally = False
    'No centra verticalmente
        .CenterVertically = False
    'Horientación vertical de la hoja
        .Orientation = xlPortrait
    'Horientación horizontal de la hoja
        .Orientation = xlLandscape
     'Calidad borrador falso, puede ser true
        .Draft = False
     'Primero número de página, en este caso es automático. pero puede ser 1,2 4 o el número que sea
        .FirstPageNumber = xlAutomatic
     'Primero número de página es 4
        .FirstPageNumber = 4
     'Primero imprime hacia abajo y luego derecha
        .Order = xlDownThenOver
     'Imprime en Banco y Negro
        .BlackAndWhite = True
     ' Ajusta a una página de ancho
        .FitToPagesWide = 1
     ' Ajusta a tres página de alto
        .FitToPagesTall = 3
     'Escala de impresión se puede reducir a un porcentaje X, en este caso es falso
        .Zoom = False
     'Si se utiliza zoom y puede disminuir en un x porcentaje la configuración de la página
        .Zoom = 100
     'Establece si imprimer errores
        .PrintErrors = xlPrintErrorsDisplayed
     'Paginas pares e impares diferentes
        .OddAndEvenPagesHeaderFooter = False
     'Primer página diferente
        .DifferentFirstPageHeaderFooter = False
     'Ajusta la scala con el documento
        .ScaleWithDocHeaderFooter = True
     'Alinea con márgenes de página
        .AlignMarginsHeaderFooter = True
     'Aplicar encabezado a todas las páginas alineado izquierda
        .EvenPage.LeftHeader.Text = ""
     'Aplicar encabezado a todas las páginas alineado centrado
        .EvenPage.CenterHeader.Text = ""
     'Aplicar encabezado a todas las páginas alineado derecha
        .EvenPage.RightHeader.Text = ""
     'Aplicar pie de pagina a todas las páginas alineado izquierda
        .EvenPage.LeftFooter.Text = ""
     'Aplicar pie de pagina a todas las páginas alineado centrado
        .EvenPage.CenterFooter.Text = ""
     'Aplicar pie de pagina a todas las páginas alineado derecha
        .EvenPage.RightFooter.Text = ""
     'Aplicar encabezado a la primer página alineado izquierda
        .FirstPage.LeftHeader.Text = ""
     'Aplicar encabezado a la primer página alineado centrado
        .FirstPage.CenterHeader.Text = ""
     'Aplicar encabezado a la primer página alineado derecha
        .FirstPage.RightHeader.Text = ""
      'Aplicar pie de pagina a la primer página alineado izquierda
        .FirstPage.LeftFooter.Text = ""
      'Aplicar pie de pagina a la primer página alineado centrado
        .FirstPage.CenterFooter.Text = ""
      'Aplicar pie de pagina a la primer página alineado derecha
        .FirstPage.RightFooter.Text = ""
    End With
    Application.PrintCommunication = True
    'Vuelve a establecer los saltos de página
    ActiveSheet.ResetAllPageBreaks
End Sub






Si te fue de utilidad puedes INVITARME UN CAFÉ y de esta manera ayudar a seguir manteniendo la página, CLICK para descargar en ejemplo en forma gratuita.


If this post was helpful INVITE ME A COFFEE and so help keep up the page, CLICK to download free example.


Si te gustó por favor compártelo con tus amigos
If you liked please share it with your friends