¿Cómo aplicar formato, configurar e imprimir desde un listbox VB Excel?

Solicito su amble ayuda para resolver el siguiente caso que no he podido aplicar de manera eficiente.

Necesito enviar a impresión los datos filtrados de un listbox, pero antes de imprimir tengo que aplicar el siguiente formato a los datos enviados a impresión(Hoja3):

El encabezado ("A6:I6") debe quedar en negritas, tipo de fuente Arial Narrow, tamaño 12 puntos, alineación centrada y con un relleno de celdas en color gris.

Los datos empiezan en ("A7:I?") debe quedar sin negritas, sin relleno de celdas, tipo de fuente Arial Narrow, tamaño 10 puntos, sin relleno de celdas y con la siguiente alineación:

Los datos de la columna A7 hacia abajo, deben alinearse al centro.

Los datos de la columna B7, C7 y D7 hacia abajo, deben alinearse a la izquierda.

Los datos de la columna E7, H7 y I7 hacia abajo, deben alinearse a la derecha.

Los datos de la columna G7 y F7 hacia abajo, deben alinearse al centro.

Por ultimo, se necesita colocar una cuadricula al rango con datos el cual incluye desde los encabezados hasta la ultima fila con datos. Ejem.("A7:I23").

NOTA: La cantidad de filas pueden variar, por lo tanto se requiere que el rango a imprimir sea dinámico para que se imprima solo el área que contenga datos.

Lo he intentado con la grabadora de macros pero me arroja mucho código redundante y aparte de imprimir la hoja que contiene los datos, también me imprime hojas en blanco .

Por lo tanto, solicito de su amplia experiencia para que me ayude con alguna rutina para resolver de manera eficaz y eficiente lo anterior.

1 Respuesta

Respuesta
1

No mencionaste cuáles datos van en la fila de encabezados.

Te puse un ejemplo para poner los encabezados.

.Value = Array("Enc1", "Enc2", "Enc3", "Enc4", "Enc5", "Enc6", "Enc7", "Enc8", "Enc9")

Si los datos se toman de otra fuente, intenta adaptarlo, de lo contrario me comentas.


Tampoco mencionaste si quieres imprimir desde la fila 1 o desde la fila 6. Ajusta la fila inicial en esta línea:

sh.PageSetup.PrintArea = sh.Range("A6:I" & lr).Address(external:=True)

Prueba lo siguiente y me comentas:

Private Sub CommandButton1_Click()
  Dim sh As Worksheet
  Dim lr As Long
  '
  Application.ScreenUpdating = False
  '
  Set sh = Sheets("Hoja3")
  sh.Cells.Clear
  lr = ListBox1.ListCount + 5
  '
  With sh.Range("A6:I6")
    .Value = Array("Enc1", "Enc2", "Enc3", "Enc4", "Enc5", "Enc6", "Enc7", "Enc8", "Enc9")
    .Resize(lr - 5).Font.Name = "Arial Narrow"
    .Resize(lr - 5).Borders.LineStyle = xlContinuous
    .Font.Size = 12
    .Font.Bold = True
    .HorizontalAlignment = xlCenter
    .Interior.Color = 12632256
  End With
  '
  With sh.Range("A7:I" & lr)
    .Value = ListBox1.List
    .EntireColumn.AutoFit
    .Font.Size = 10
    .Columns("A:A").HorizontalAlignment = xlCenter
    .Columns("B:C").HorizontalAlignment = xlLeft
    .Columns("E:E").HorizontalAlignment = xlRight
    .Columns("H:I").HorizontalAlignment = xlRight
    .Columns("F:G").HorizontalAlignment = xlCenter
  End With
  '
  Application.ScreenUpdating = True
  sh.PageSetup.PrintArea = sh.Range("A6:I" & lr).Address(external:=True)
  sh.PrintOut Copies:=1
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas