• 👏 Bienvenido a nuestra comunidad Excel

    ¿Todavía no estás registrado? 😲

    Registrate gratis aquí y podrás:

    💪 Hacer preguntas a los expertos
    ⬇️ Descargar ejemplos y plantillas
    🏅 
    Acceder a contenidos premium

Listbox autodimensionado

Cacho R

Well-known member
Cuando cargamos datos a un listbox o a un combobox de muchas columnas, solemos aplicar un cierto tiempo -no menor- a dimensionar los anchos de las columnas respectivas.

El presente aporte realiza automáticamente esa tarea.

La única información que es requerido pasarle -como parámetro- al procedimiento es el rango de celdas de la tabla de datos, incluyendo la fila superior de títulos. A partir de esa información:

- El evento Initialize del userform llama al procedimiento y le pasa el rango de datos;

- El procedimiento establece la cantidad de columnas que tendrá el listbox, así como sus respectivos anchos;

- Para que la equivalencia sea más ajustada, el tipo y el tamaño de la letra del listbox se asemeja al tipo y al tamaño de la primera celda de datos de la tabla.

- Adicionalmente, se aprovechan dos DTPicker presentes en el userform para realizar un clásico filtro "desde-hasta" a partir de un campo fecha. Aquí lo interesante es que el resultado del filtro es copiado a otro rango, y ese rango auxiliar es pasado -como parámetro- al procedimiento.

- El código contiene una buena cantidad de comentarios como para orientar al lector sobre lo que se está haciendo a cada paso.

¡Espero que sea de utilidad!
Saludos, Cacho R.
 

Adjuntos

HBanchieri

New member
No te imagina como me gusta ver un "codigo" así, limpio, sin nada sobrando, directo al punto.

He acrecentado esta linea,
Código:
'El ancho del listbox es 20 unidades mayor que la suma de los anchos de sus columnas
  ListBox1.Width = 20 + WorksheetFunction.Sum(mColWidth)
  DoEvents
'»     »     »     »     »     »    ESTA    »     »     »     »     »     »
 'El ancho del UserForm es 35 unidades mayor que la suma de los anchos de sus columnas
 UserForm1.Width = 35 + WorksheetFunction.Sum(mColWidth)
'«     «     «     «     «     «     «     «     «     «     «     «     «     «     «
Si me permite te hago una preguntas, quizá sean muy básicas pero realmente no se la respuesta... :D

Private Sub CargaDatos(Rng As Range[)

El hecho de que la variable se declara entre paréntesis es que permite indicar el rango, de esta forma?

CargaDatos Hoja1.[a1].CurrentRegion

O de esta?

CargaDatos .[ad1].CurrentRegion

La verdad nunca entendí bien el uso del paréntesis en el nombre de la macro, sera que podría hacer algunas consideraciones sobre el tema?

Gracias.
 

HBanchieri

New member
Mestre, si el Listbox esta configurado para ser auto-dimensionado el Userform no esta.

Tampoco están habilitadas las barras de desplazamiento horizontal y vertical del Listbox.

Me parece que habría que cambiar una o otra cosa, o bien las dos.

Saludos...
 

Cacho R

Well-known member
HBanchieri dijo:
... si el Listbox esta configurado para ser auto-dimensionado el Userform no esta. Tampoco están habilitadas las barras de desplazamiento horizontal y vertical del Listbox...
No entendí tu dificultad por lo que te sugiero: ¿Qué tal si abres una nueva consulta y planteas -con un ejemplo Excel- la cuestión?
 

itanium

New member
En primer lugar quiero agradecer a Cacho y Adrian por su aporte, muy util y educativo. Como se dijo aqui: directo y muy bien comentado.
Me estoy iniciando en este tipo de trabajos, por lo que poco a poco he ido aprendiendo de foros como este. Revisando los dos aportes hechos, me gustaria saber mejorar el codigo de ustedes para que al seleccionar una linea del listbox una vez encontrado el registro, es decir aplicado el filtro, podamos exportar esos registros a utra parte, bien sea una celda u otro formulario. Si ya filtre los datos, ahora como los "copipego"?

Saludos, muy agradecido :wink:
 
Arriba