Imprimir solo los datos cargados en un ListBox que se han obtenido mediante el Filtro por un ComboBox.

Una vez he filtrado los datos mediante el ComboBox (que ya me funciona perfectamente), ahora necesito que los datos resultantes en el ListBox como resultado del Filtro, sean enviados a la Impresora, para obtenerlos en un papel.

Solo me interesan los datos Filtrados y los que estan en el ListBox.

Respuesta
1

Luis Carlos, para poder hacerlo tienes que pasar los datos del listbox a una hoja. Lo mejor es que crees una hoja nueva y después la elimines. De esta forma

Private Sub CommandButton1_Click()
'Creas una hoja Nueva
Worksheets.Add
For i = 0 To ListBox1.ListCount - 1
    Range("A" & Range("A" & Rows.Count).End(xlUp).Row + 1) = ListBox1.List(i, 0)
Next
'Esta instrucción Imprime la hoja
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
'Esta instrucción Borra la hoja
ActiveWindow.SelectedSheets.Delete
End Sub

Si te ha servido la respuesta, no olvides valorarla.

Marcial, muchas gracias por tu valioso aporte.

FUnciona perfecto!, pero tengo un inconveniente, el libro tiene una macro que impide la creación de nuevas hojas. Entonces, tocaría, desactivar esa opción primero para poder implementar tu solución, y como te imaginaras, no se como hacerlo.

Luis Carlos, hay varias formas de evitar crear hojas nuevas, envíame el fichero y te lo reenvío para que se puedan crear hojas.

De todas formas una de las más comunes es mediante el evento Workbook_NewSheet, mira si tienes una Sub con ese nombre, si es así, ahí está el código que impide crear hojas.

[email protected]

1 respuesta más de otro experto

Respuesta
4

No puedes imprimir directamente del listbox, lo que se puede hacer es enviar los datos del listbox a una hoja y posteriormente imprimir la hoja. Crea una hoja llamada "imp".

Esta es la macro

Private Sub CommandButton1_Click()
'Por.Dante Amor
    Set h = Sheets("imp")
    h.Cells.Clear
    h.Range("A1:E1") = Array("NO", "GRADO", "APELLIDOS", "NOMBRE", "CÉDULA")
    For i = 0 To ListBox1.ListCount - 1
        h.Cells(i + 2, "A") = ListBox1.List(i, 0)
        h.Cells(i + 2, "B") = ListBox1.List(i, 2)
        h.Cells(i + 2, "C") = ListBox1.List(i, 3)
        h.Cells(i + 2, "D") = ListBox1.List(i, 4)
        h.Cells(i + 2, "E") = ListBox1.List(i, 5)
    Next
    u = h.Range("A" & Rows.Count).End(xlUp).Row
    If u = 1 Then
        MsgBox "No hay registros a imprimir"
    Else
        h.PrintOut Copies:=1, Collate:=True
    End If
End Sub

Nota: Debido a la forma en que cargaste el listbox, de esa forma se tiene que leer, es decir, la columna 1 del listbox la dejaste vacía.


Gracias Dante, eso era justo lo que deseaba hacer.

y en cuanto a lo de la Columna 1 de Listox, como hago para corregir el error?

También me surge otro detalle, al cual le debo prestar atención y es que a los encabezados de columna, los debo centrar en la celda (A:E) y también, el contenido de la celda, debe ser Autoajustado, para que se muestren todo el contenido de la celda, creo que eso se llama AutoFit.

Crea la pregunta respectiva para corregir la macro de carga y otra para los ajustes de encabezado y columnas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas