domingo, 5 de junio de 2022

VBA EXCEL 2022: COMBOBOX MULTICOLUMNA CON DATOS NO CONTINUOS



Con este código podemos llenar un combobox en un formulario, con datos de más de una columna, estén estas columnas una al lado de la otra o no. Nosotros escojemos.

ANTES: Nuestro libro de excel debe estar habilitada para ejecutar macros, es decir, con la extención .xlsm y nuestra pestaña de programador debe estar en modo diseño para que podamos escribir código y editar los objetos que vamos a utilizar.


PASO 1: En las columnas escribimos nuestros datos. Por el bien de este ejemplo, pondremos encabezados, en este caso nombre, edad y ciudad (aunque nuestro código solo utilizará los datos de NOMBRE y CIUDAD)

Datos en columnas. No es una tabla


PASO 2: Creamos un botón de comando(commandbutton) en una de nuestras hojas, y tambien creamos un formulario. Hacemos doble clic sobre el botón de comando y escribimos lo siguiente:

Private Sub CommandButton1_Click()

UserForm1.Show

End Sub

Con esto mostraremos el formulario al hacer clic en el botón de comando.


PASO 3: En el formulario creamos un cuadro combinado (combobox). Creamos también una etiqueta (label) para describír qué datos nos mostrará el cuadro combinado. 




PASO 4: Hacemos doble clic en el formulario y escribimos lo siguiente:
        
Private Sub UserForm_Initialize()

Dim rang As Range
Set rang = Sheets("Hoja1").Range("B8:D12")

With ComboBox1
.ColumnCount = 2
.ColumnWidths = "50;50"
.List = Application.Index(rang, Evaluate("ROW(1:" & rang.Rows.Count & ")"), Array(1, 3))
End With

End Sub

Definimos la variable "rang" como un rango, y este rango seran nuestros datos (sin los encabezados). 

Cuando el formulario se inicialice nuestro cuadro combinado nos mostrará 2 columnas de datos y que cada una de estas columnas va a medir 50 puntos . Luego llenamos este cuadro combinado con una lista de salida que se crea a patir de una lista de entrada.  Esta lista de salida usa los indices de las filas que contienen datos en nuestro rango "rang", en las columnas 1 y 3.  

Si queremos que  nuestro cuadro combinado tenga 3 columnas, debemos cambiar ColumnCount a 3 y Array a las columnas que queremos utilizar. Tambien dependiendo del largo de nuestros datos debemos jugar con los tamaños de las columnas.   

 
PASO 5: Ejecutar




COMENTARIO: Este código es facil de implementar, pero cómo funciona detras es todo un asunto. La explicación detras del funcionamiento se encuentra en el siguiente LINK. Porfavor visitalo si tienes alguna duda, y da el crédito que corresponde a quien amablemente explica todo con detalles (DoctorAElstein). Recomiendo también este FORO EXCELFOX, que tiene una multitud de post referidos a Excel y VBA.

LINK DE DESCARGA

2 comentarios:

  1. ¡Muchísimas gracias! me ha sido de gran ayuda

    ResponderBorrar
    Respuestas
    1. Me alegra mucho haber podido ayudarte😊 ¡Te deseo exito en lo que estes trabajando!✨🐇

      Borrar