En la descripción del vídeo tienes el vínculo para descargar el ejercicio. Vínculo a un ejercicio modificado según consulta de los comentarios: bit.ly/GerardoExcel-ListBoxDinamico-v2
@elmorocho450210 ай бұрын
Excelente la modificación, gracias por compartir.
@miguelseijas27192 ай бұрын
Gerardo, la verdad es que, como dicen en mi país, "eres un verdugo". Me encantan este tipo de códigos que generan cosas dentro de la aplicación. Si pudiera, te daría 10 "me gusta", pero al menos te doy el que me permiten. Mil gracias.
@GerardoExcel2 ай бұрын
Muchas gracias Miguel!!
@JoseBelloneАй бұрын
Hola Gerardo, muchísimas gracias, esperaré ansioso el video. Saludos
@elmorocho450210 ай бұрын
Excelente, siempre en bueno seguir sus videos, aportan mucho conocimiento. GRACIAS
@GerardoExcel10 ай бұрын
Muchas gracias!!
@JoseBellone2 ай бұрын
Ok, muchas gracias Gerardo. Saludos
@GerardoExcel2 ай бұрын
Gracias!!
@lalocalle873810 ай бұрын
Gerardo, excelente contenido. Gracias. Continuos éxitos para tu canal.
@GerardoExcel10 ай бұрын
Gracias Lalo!
@josevivas49829 ай бұрын
Excelente e Interesante manera de DINAMISAR EL LISTBOX, Gracias Gerardo, Saludos desde Managua.
@GerardoExcel9 ай бұрын
Gracias a ti!!
@tomasbenitocarpintero10 ай бұрын
Muy buena formación. Un capitulo interesantísimo. Muchas gracias Gerardo
@GerardoExcel10 ай бұрын
Muchas gracias!
@jordigarciadiaz889410 ай бұрын
Genial 👏👏👏👏 Muchísimas gracias!!!
@GerardoExcel10 ай бұрын
Gracias... muy amable Jordi!!
@danielgalan293410 ай бұрын
Hola Gerardo, me encantó el contenido. Para aportar , te comento que al ejecutar la macro tuve un comportamiento que no esperaba, las columnas que tenían anchos con decimales al momento de poblar el listBox eliminaban el punto decimal y convertían por ejemplo ( 22.7 a 227); es decir, propiedad .ColumnWidths del listBox en su cadena quitaba los puntos decimales y de ahí el comportamiento. Me imagino que esto se debe a las configuraciones regionales y como Excel no logra ajustarse. Yo soy de México. Para corregir el problema habría que hacer los siguientes cambios: En la Subrutina UserForm_Initialize sustituir. En las declaraciones: 'Dim ppc, totalLB As Double Dim ppc, totalLB As Long * sustituyo el tipo de variable de Doble a Long para no manejar decimales. Dentro del ciclo FOR para construir la cadena strCW 'ppc = loMiTabla.ListColumns(c).Range.Width * 0.8) ppc = Int(loMiTabla.ListColumns(c).Range.Width * 0.8) + 1 * Uso la función Int para truncar y el + 1 para controlar la diferencia de los decimales. En la subrutina crearTitulosColumnas. En el segundo ciclo FOR: For i = LBound(arrLabels) To UBound(arrLabels) If i = 1 Then With arrLabels(i) .Height = 12 '.Width = loMiTabla.ListColumns(i).Range.Width * 0.8 *COMENTADO para efecto de ver cambio .Width = Int(loMiTabla.ListColumns(i).Range.Width * 0.8) + 1 '.Left = Me.ListBox1.Left + 7 *COMENTADO para efecto de ver cambio .Left = Me.ListBox1.Left + 10 'Ajuste en la posición de la primer etiqueta .Top = Me.ListBox1.Top - .Height .Caption = loMiTabla.HeaderRowRange(i) End With Else With arrLabels(i) .Height = 12 '.Width = loMiTabla.ListColumns(i).Range.Width * 0.8 *COMENTADO para efecto de ver cambio .Width = Int(loMiTabla.ListColumns(i).Range.Width * 0.8) + 1 .Left = arrLabels(i - 1).Left + arrLabels(i - 1).Width .Top = Me.ListBox1.Top - .Height .Caption = loMiTabla.HeaderRowRange(i) End With End If Next i Obviamente los comentarios se pueden quitar, sólo los integro para entender el ajuste realizado. Espero les sirva.
@GerardoExcel10 ай бұрын
Doble gracias Daniel!! Por el comentario y por el aporte. Es bueno saber este tipo de "inconvenientes". Saludos!!
@jhoncharles41216 ай бұрын
Hola Gerardo, a mi me pasa lo mismo en el ancho de columnas, entonces la Solución es poner el ancho de las columnas de la tabla en numero entero ó se resuelve con código vba?@@GerardoExcel
@GerardoExcel6 ай бұрын
@@jhoncharles4121 Hola Jhon. El archivo de descarga ya lo modifiqué y ahora estaba funcionando correctamente que yo sepa.
@josevivas49829 ай бұрын
no tuve necesidad del factor 0.8, lo elimine. y me callo como "anillo al dedo" la colocacion de los encabezados, con sus respectivas columnas, luego le agregue dos columnas mas y el comporatamiento fue perfecto tambien. Saludos.
@GerardoExcel9 ай бұрын
Ok muy bien!
@maximilianoorezzo80157 ай бұрын
Excelente tutorial!! Me resulta extremadamente útil. Gracias!! Va el mg y suscripción crack!
@GerardoExcel7 ай бұрын
Muchas gracias, muy amable!!
8 ай бұрын
Muy útil! Si se crea una función a la cual se le pase por parámetros el formulario, construir (diseñar) el formulario resulta mucho más sencillo. Se guardarla toda la estructura de diseño en un módulo que se pueda importar y de ahi en adelante es pan comido...
@GerardoExcel8 ай бұрын
Gracias por comentar!!
@antoniobuendia863624 күн бұрын
Hola muy buenas , video muy bien explicado e ilustrativo, he añadico una pequeña cosita y es crear las etiquetas en tiempo de ejecución porque cuando añadía una columna nueva me retorna un error y es esto: Dim lblcontrol As MSForms.Label 'Set lblcontrol = Me.Controls.Add("Forms.Label.1", "lblTitulo" & i) Espero sea de utilidad
@GerardoExcel21 күн бұрын
Muchas gracias! Esa variante la tengo creada para un vídeo posterior. De cualquier forma agradecido por contribuir...
@jmaciasanino3 ай бұрын
Exelente información, saludos desde Panamá, Consulta, de que manera se puede hacer para seleccionar solo las columnas que se desean mostrar. Saludos S.S.
@GerardoExcel3 ай бұрын
Gracias por visitar y comentar!! En la descripción del vídeo hay un vínculo: El texto dice así: Descarga para el mismo ejercicio pero solo carga algunas columnas... Espero que esa versión y ejercicio te pueda inspirar... Saludos!!
@jorgetorreszavala594010 ай бұрын
Hola, buenos días... Para empezar, mi agradecimiento por tu aporte técnico. EXCELENTE. Tengo una situación: ésta MACRO, funciona SÓLO en el archivo que contiene la MACRO. Sí se ejecuta para otro archivo, no funcionan los encabezados. ¿Tendrá alguna sugerencia para ésta situación? Reciba mi agradecimiento y felicitación desde México
@GerardoExcel10 ай бұрын
Gracias por comentar Jorge!! Si no lo ha realizado, es posible que precises realizar algunos pequeños ajustes: Por ejemplo, ¿el control ListBox se llama igual? (ListBox1) En la parte inicial del evento Initialize del formulario existen las siguientes asignaciones a las variables objeto: Set ws = Worksheets("Ejercicio") Set loMiTabla = ws.ListObjects("Tabla1") ¿Ha actualizado los nombres de la hoja (de "Ejercicio" para el nombre de tu hoja) y de la tabla (de "Tabla1" para el nombre de tu tabla)? He realizado una prueba en otro libro de Excel copiando el código y realizando los ajustes que menciono y funciona todo bien. Saludos!!
@JoseBellone2 ай бұрын
O sea, sería con ciclo for y la propiedad list. Gracias. Saludos
@GerardoExcel2 ай бұрын
Trataré de crar alguna solución a tu consulta... pero ni se cuando... gracias por seguir el canal y comentar!
@JoseBellone2 ай бұрын
Hola Gerardo, como estás, una consulta, hay alguna manera de colocar los títulos de cabecera de la tabla sin la propiedad rowsource? (sin etiquetas) o sea, que no sean seleccionables, para que cuando recorra mas de 10 columnas (16 que tengo) recorra hacia el costado derecho la barra de desplazamiento del listbox y se muevan junto con las cabeceras (lo hice mas chico al ancho del formulario porque era muy grande en tamaño). Esto obedece en razón de poder filtrar el contenido del listbox. Gracias Gerardo. Saludos
@GerardoExcelАй бұрын
Hola José. Me parece que te respondí en otro comentario. Bueno... solo decirte que acabo de grabar un vídeo con una solución a lo que me planteas... el vídeo se publicará en septiembre. Gracias y saludos!!
@pablogarciadelamelena60774 ай бұрын
Buenas noches Gerardo. Saludos desde Perú. He adaptado tu código, en mi proyecto en Excel. Tengo una consulta: Mi Control de inventarios tiene una Hoja con la Base de Datos de Productos, otra donde registro las Entradas y en otra las Salidas de los productos. En estas últimas, he implementado un Formulario de Búsqueda con tu ListBox Dinámico. Todo perfecto, hasta el paso de etiquetar las columnas en el ListBox de Salidas. Formo la cadena de la propiedad ColumnWidths (strCW) del ListBox para 5 columnas, del total de 7 de la Base de datos: para el ListBox de Ingresos como para el de Salidas, se muestran las columnas 1, 3, 4 y 5, para el de Ingresos la 6 (Cto. Unit.) y para el de Salidas la 7 (Precio Vta.). La data carga, según lo esperado, en ambos ListBox. Con tu código he podido crear y posicionar las etiquetas para las columnas del ListBox de Ingresos (OK), pero no puedo hacerlo para el de salida. --------------------------------------------------------------------------------------------- Private Sub CrearTitulosColumnas() ' Variables para la iteración del array (c) para asignar valores a las propiedades de los controles Dim c As Byte Dim i As Byte ' Crear una variable array dinámica y redimencionarla Dim arrEtiqueta() As MSForms.Control ReDim arrEtiqueta(1 To numColLB) ' Asignar a la variable array cada uno de los controles de etiqueta: 5 (numColLB) For c = 1 To numColLB Set arrEtiqueta(c) = Me.Controls.Add("Forms.Label.1", "lblTit" & c) Next c ' Asignar valores a propiedades de las etiquetas For i = LBound(arrEtiqueta) To UBound(arrEtiqueta) If i = 1 Then With arrEtiqueta(i) .Height = 15 .Width = Int(MisProductos.ListColumns(i).Range.Width) + 1 .Left = Me.lst_ListaProducto.Left .Top = Me.lst_ListaProducto.Top - .Height .Caption = MisProductos.HeaderRowRange(i) End With Else With arrEtiqueta(i) .Height = 15 .Width = Int(MisProductos.ListColumns(i + 1).Range.Width) + 1 .Left = arrEtiqueta(i - 1).Left + arrEtiqueta(i - 1).Width .Top = Me.lst_ListaProducto.Top - .Height .Caption = MisProductos.HeaderRowRange(i + 1) End With End If Next i End Sub --------------------------------------------------------------------------------------------- En la última iteración (i=5) no logro que la etiqueta de la última columna del ListBox, para el caso del formulario de búsqueda de Salidas, sea la cabecera de la columna 7 de la Base de Datos. Te agradecería, me aconsejaras como debo resolver este problema. Gracias.
@GerardoExcel4 ай бұрын
Gracias por comentar y visitar el canal. Si entendí bien tu consulta pienso que se solucionaría con la siguiente modificación (por favor, compare el código y vea donde están las modificaciones) Saludos!! ' Asignar valores a propiedades de las etiquetas For i = LBound(arrEtiqueta) To UBound(arrEtiqueta) If i = 1 Then With arrEtiqueta(i) .Height = 15 .Width = Int(MisProductos.ListColumns(i).Range.Width) + 1 .Left = Me.lst_ListaProducto.Left .Top = Me.lst_ListaProducto.Top - .Height .Caption = MisProductos.HeaderRowRange(i) End With Else With arrEtiqueta(i) .Height = 15 .Width = Int(MisProductos.ListColumns(i + 1).Range.Width) + 1 .Left = arrEtiqueta(i - 1).Left + arrEtiqueta(i - 1).Width .Top = Me.lst_ListaProducto.Top - .Height If i 5 then .Caption = MisProductos.HeaderRowRange(i + 1) Elseif i = 5 then .Caption = MisProductos.HeaderRowRange(i + 2) ' o MisProductos.HeaderRowRange(7) Porque es la columna 7 de tu tabla se precisa que la iteración 5 corresponda con la columna 7 de tu tabla Salidas End If End With End If Next i
@pablogarciadelamelena60774 ай бұрын
@@GerardoExcel, implementé tu modificación y en primera instancia, en los ListBox de ambas hojas, se muestra el título de la columna 7 (Precio Vta.) de la BD. Analizando, la lógica está bien, cuando el índice es diferente a 5, le suma 1 (i+1), cuando es 5 le suma 2 (i+2), es decir, en ambos se muestra el título de la columna 7 de la BD. Encontré la solución (quemé cerebro). Adicioné una condición a tus líneas de código: If i 5 Then .Caption = MisProductos.HeaderRowRange(i + 1) ElseIf i = 5 Then If MiHojaAct = "Ingresos" Then .Caption = MisProductos.HeaderRowRange(i + 1) If MiHojaAct = "Salidas" Then .Caption = MisProductos.HeaderRowRange(i + 2) End If Muchas gracias por el apoyo y la rapidez de tu respuesta a mi consulta. Acá tenemos un dicho "Una pena entre dos, es menos atroz"... 🙂
@contacaccelmh4 ай бұрын
Exelente tutorial. Una pregunta: Como le inserto un buscador?
@GerardoExcel4 ай бұрын
Gracias por visitar el canal y comentar!! Respecto a tu pregunta, mira este vídeo: kzbin.info/www/bejne/oJulZ52Qbc5_g7M
@contacaccelmh4 ай бұрын
@@GerardoExcel eres bueno en esto, me parece que es muy eficiente la forma de cargar los datos. Muchas Gracias. Guillermo Rodriguez
@elmorocho450210 ай бұрын
Profe hay alguna forma de solo cargue columnas espeficicas y no toda la tabla. Gracias
@GerardoExcel10 ай бұрын
Si. Puedes cargar el ListBox con un ciclo For To Next y con algunos ajustes en el código se puede hacer... Bueno ya lo he probado y he realizado el ejercicio y me funciona bien. También incluye modificaciones aportadas por Daniel Galan. En la descripción y en el primer comentario dejo el vínculo. Gracias y saludos!!
@elmorocho450210 ай бұрын
Va subirlo. Gracias
@jhoncharles41216 ай бұрын
Hola Gerardo, tengo el problema de que no me funcionan los encabezados, la macro no envía ningún error simplemente no se cargan los "Labels".
@GerardoExcel6 ай бұрын
Hola Jhon. Lo he probado varias veces y en tres computadoras diferentes y me funciona bien. No se que puede ser.
@aditdesarrolloeinnovacion90769 ай бұрын
Hola. A mi no me toma el ancho de las columnas de la tabla en el listbox. Me aparecen super separadas las columnas. Ya he revisado el código una y otra vez y no se que hacer.
@GerardoExcel9 ай бұрын
He actualizado el vínculo. Ahora pienso que funciona todo bien: bit.ly/GerardoExcel-ListBoxDinamico A mi me funciona todo bien, pero parece que debido a algunas configuraciones regionales no siempre funcionaba como a mí. Puedes ver el comentario de Daniel Galan. Saludos!!