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 clculo. Esto tiene sus ventajas pero tambin sus inconvenientes, por una parte podemos modificar la informacin que extraemos y mostramos y por otra no requiere demasiado trabajo a la hora de hacer la instruccin 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 creacin de un programa de gestin de almacn. Una parte esencial sera 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 botn, lo primero sera construir un formulario, que podra ser parecido al que muestro a continuacin:
Para que cuando abramos nuestro archivo se muestre directamente el formulario, debis utilizar esta macro y pegarla en el mdulo ThisWorkbook: Private Sub Workbook_Open() 'Cuando abrimos el libro se muestra el userform1 UserForm1.Show End Sub Lo siguiente es escribir el cdigo en el botn 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 botn, se mostrar la siguiente pantalla:
Como podis observar lo que se muestra es un formulario (userform2) con un cuadro de lista (Listbox) dentro. El listbox lo obtendris 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, aadimos dos botones que nos sern 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 cdigo 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 botn SALIR pegamos el siguiente cdigo: 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 botn lo pongo como curiosidad, sera exportar los datos del inventario a un PDF, para ello es necesaria la siguiente macro: Private Sub CommandButton2_Click() 'desactivamos la actualizacin de pantalla Application.ScreenUpdating = False 'hacemos visible la hoja2 con el inventario Hoja2.Visible = xlSheetVisible 'exportamos los datos a PDF y los guardamos automticamente en mis documentos permitiendo su visualizacin 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 ( Diseo de Pgina, botn imprimir ttulos) y acotar los saltos de pgina (Vista, Ver saltos de pgina). Os dejo imgenes 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, tenis que entrar en VBA, seleccionar la hoja y en Propiedades de la Hoja Pulsar en Visible y elegir la opcin: xlSheetVisible, as:
Nota importante 2: El botn 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 de ejemplo pulsando en: DATOS EN LISTBOX Y EXPORTAR DE EXCEL A PDF