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:
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:
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.
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:
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:
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í:
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 en: DATOS EN LISTBOX Y EXPORTAR DE EXCEL A PDF