6 febrero, 2025

MOSTRAR DATOS EN UN LISTBOX Y EXPORTAR DE EXCEL A PDF

Cuando trabajamos con formularios y necesitamos mostrar un informe o el detalle de una serie de datos, por comodidad lo solemos hacer con una hoja de cálculo. Esto tiene sus ventajas pero también sus inconvenientes, por una parte podemos modificar la información que extraemos y mostramos y por otra no requiere demasiado trabajo a la hora de hacer la instrucción en VBA para que muestre u oculte una hoja. Pero el inconveniente es que es posible que no deseemos que el usuario final tenga posibilidad de modificar datos y solo queramos que el usuario visualice los datos. Para ello os propongo la siguiente entrada donde vamos a tratar la figura del “Listbox” como control de formulario y su gran utilidad.

Pongamos como ejemplo que estamos realizando un proyecto en VBA para la creación de un programa de gestión de almacén. Una parte esencial sería sin duda el inventario, que al fin y al cabo es la base de datos del programa. Supongamos que ya tenemos nuestro inventario en un hoja Excel y queremos mostrarlo pulsando un botón, lo primero sería construir un formulario, que podría ser parecido al que muestro a continuación:

EJEMPLO_LISTBOX

Para que cuando abramos nuestro archivo se muestre directamente el formulario, debéis utilizar esta macro y pegarla en el módulo “ThisWorkbook”:

Private Sub Workbook_Open()
'Cuando abrimos el libro se muestra el userform1
UserForm1.Show
End Sub

Lo siguiente es escribir el código en el botón de comando “Ver Inventario” que lo que hará será mostrar el Listbox con el inventario completo:

Private Sub CommandButton3_Click()
'Mostramos el userform2 y cargamos los datos
Hoja2.Visible = xlSheetVeryHidden
Load UserForm2
UserForm2.Show
End Sub

Así, una vez que pulsemos en el botón, se mostrará la siguiente pantalla:

EJEMPLO_LISTBOX_1

Como podéis observar lo que se muestra es un formulario (userform2) con un cuadro de lista (Listbox) dentro. El listbox lo obtendréis en el Cuadro de Herramientas pulsando en Cuadro de lista, tal y como muestro en la imagen.

EJEMPLO_LISTBOX_3

Una vez que tenemos el cuadro de lista incrustado en el formulario, añadimos dos botones que nos serán de ayuda “SALIR” y “PASAR A PDF”, y que luego comentaré. En el Listbox vamos a pegar la siguiente macro, donde lo que haremos será decirle al cuadro de lista que muestre el contenido del inventario que se encuentra en la “hoja2” en el rango B2 a E y que puede llegar hasta el fin de la hoja. El resto del código es necesario para evitar que el usuario vea como la hoja2 de Excel se muestra, y para ello debemos mostrarla y ocultarla en el mismo momento y sin el refresco de pantalla:

Private Sub UserForm_Initialize()
'mostramos hoja2
Hoja2.Visible = xlSheetVisible
Hoja2.Select
'cargamos los datos del inventario en el listbox1
Me.ListBox1.RowSource = "B2:E" & Hoja2.Range("B" & Rows.Count).End(xlUp).Row
'ocultamos la hoja2
Hoja2.Visible = xlSheetVeryHidden
'refrescamos pantalla
Application.ScreenUpdating = True
End Sub

Siguiendo con el resto de herramientas, en el botón “SALIR” pegamos el siguiente código:

Private Sub CommandButton1_Click()
'salimos del userform2
UserForm2.Hide
'ocultamos la hija excel con el detalle de inventario
Hoja2.Visible = xlSheetVeryHidden
End Sub

De ésta forma lo que hacemos es ocultar el cuadro de lista con el inventario y volver al formulario inicial. El siguiente botón lo pongo como curiosidad, sería exportar los datos del inventario a un PDF, para ello es necesaria la siguiente macro:

Private Sub CommandButton2_Click()
'desactivamos la actualización de pantalla
Application.ScreenUpdating = False
'hacemos visible la hoja2 con el inventario
Hoja2.Visible = xlSheetVisible
'exportamos los datos a PDF y los guardamos automáticamente en mis documentos permitiendo su visualización previa.
Hoja2.ExportAsFixedFormat Type:=xlTypePDF, Filename:="Inventario", OpenAfterPublish:=True
'ocultamos la hoja2
Hoja2.Visible = xlSheetVeryHidden
'refrescamos pantalla
Application.ScreenUpdating = True
End Sub

Esta macro guarda directamente la hoja2 como PDF en “mis documentos” con el nombre “Inventario” y al mismo tiempo muestra el PDF para que veamos qué es lo que hemos guardado:

EJEMPLO_LISTBOX_2

Previamente, la hoja2 hay que configurarla adecuadamente para que muestre el mismo encabezado en todas las hojas ( Diseño de Página, botón “imprimir títulos”) y acotar los saltos de página (Vista, “Ver saltos de página”).
Os dejo imágenes relacionadas para poder configurar la hoja2 para exportar a PDF:

EJEMPLO_LISTBOX_5      EJEMPLO_LISTBOX_6

Espero que os haya servido de ayuda en vuestro trabajo diario y proyectos futuros 🙂

Nota importante 1: la hoja2 “Inventario”, está oculta  utilizando editor de VBA en propiedades de la hoja, para poder verla, tenéis que entrar en VBA, seleccionar la hoja y en Propiedades de la Hoja Pulsar en Visible y elegir la opción: xlSheetVisible, así:

EJEMPLO_LISTBOX_4

Nota importante 2: El botón “Pasar a PDF” solo funcionará en versiones Excel 2007 y superiores, que tienen la propiedad de guardar como PDF, en versiones anteriores, mostrará un error.

Saludos!!

Descarga el archivo pulsando enDATOS EN LISTBOX Y EXPORTAR DE EXCEL A PDF

 

Comparte este post

Si te ha gustado o tienes alguna duda, puedes dejar aquí tu comentario.

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies