(LOS DATOS NO SE REPITEN E IGNORA CELDAS VACIAS)
Con este código podremos llenar un cuadro combinado (combobox) con DATOS UNICOS, es decir, que NO SE REPITEN, a partir de los datos de una tabla. La principal ventaja de éste metodo, es que, dadas las caracteristicas de las tablas de Excel, al escribir un dato en la primera fila vacia inmediatamente bajo nuestra tabla, esta se ampliara automaticamente y recojera este dato como propio. Al ampliarse la tabla, nuestro combobox obtendrá un nuevo dato de forma dinamica.
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: Creamos una tabla de datos (dando formato de tabla con escabezados). En diseño de tabla, parte superior izquierda, cambiamos el nombre a nuestra tabla que por defecto es Tabla1. Asignamos el nombre; en este caso "TABLADEDATOS" y luego comprobamos que el nombre esté creado accediendo a Formulas y administrador de nombres.
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 SubCon 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. En este caso, queremos mostrar los datos de la columna "NOMBRES" de nuestra tabla.
Private Sub UserForm_Initialize()
Dim Dictionary As ObjectSet Dictionary = CreateObject("Scripting.Dictionary")For Each Cell In Sheets("Hoja1").ListObjects("TABLADEDATOS").ListColumns(1).DataBodyRange
If Dictionary.exists(Cell.Value) Or IsEmpty(Cell.Value) ThenElseDictionary.Add Cell.Value, EmptyComboBox1.AddItem Cell.ValueEnd If
Next Cell
End Sub
Declaramos y creamos un objeto de tipo diccionario llamado Dictionary. Situándonos en la "Hoja1", por cada celda en la columna "1" de nuestro objeto "TABLADEDATOS" , si el valor de la celda existe en el diccionario, o bien, está vacío, no haremos nada; de lo contrario, añadiremos un elemento al diccionario. El elemento es un par de datos y está compuesto por una llave y su valor. La llave sería el valor de la celda y su valor, en este caso, estaría vacío. Finalmente añadimos tambien el valor de la celda al combobox.
COMENTARIO
- Las llaves y valores del diccionario para este ejemplo serían los siguientes:
- Si cambiamos el valor de Empty por un String, ejemplo: "None", quedarían de la siguiente forma:
- Si cambiamos el valor de Empty por Cell.Offset(0,1), tomaría el valor de la celda que está en la misma fila, pero una columna hacia la derecha), quedando de la siguiente forma:
PASO 5: Ejecutar
LINK DE DESCARGA
No hay comentarios.:
Publicar un comentario