Se conoce que existe una forma de llenar listas desplegables de modo dinamico, algo relacionado lo vimos en este tema: Listas Desplegables sin Desref y con Indice
Pues aqui un poco similar se trata este post y es llenar ComboBox desde un userform y para los que aun desconecen como hacerlo, aqui les adjunto un ejemplo, en el cual veran dos tipos, como importante, si exitieran espacios en blanco en la lista de datos (es decir celdas vacias) con codigo VBA se supera ese inconveniente, llenando sin espacios el ComboBox, automaticamente...

No es dificil, ni nada complicado, puesto que basta crear un bucle, para marcar el rango usado, condicionarlo y listo
Aqui los dos codigos:
Private Sub ComboBox1_enter()
Me.ComboBox1.Clear
For x = 2 To Range("A" & Rows.Count).End(xlUp).Row
If Cells(x, 1) <> Empty Then ComboBox1.AddItem Range("A" & x).Value
Next
End Sub
Private Sub ComboBox2_enter()
Me.ComboBox2.Clear
For Each celda In Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row)
If celda <> Empty Then ComboBox2.AddItem celda.Value
Next
End Sub
Y les adjunto el archivo para pruebas/revision/analisis/comentarios
Espero les guste o sea de utilidad
Saludos desde Honduras
Muy buen aporte, compa Gerson. Muy util y sencillo.
ResponderEliminarAun asi, tengo una duda:
1.- por que limpias el ComboBox antes del codigo?
Me.ComboBox.Clear
Gracias anticipadas, compa.
Hola himself
ResponderEliminarEn realidad no tiene gran utilidad es solo una practica nada mas, pero no pasa nada si lo quitas
Saludos y gracias por tu comentario
Está muy bien, maravilloso para mis conocimientos (casi nulos).
ResponderEliminarGuardare este codigo talves para un futuro ¿quien sabe?
Voy buscando tambien casi lo mismo pero sin celdas vacias para agregar un otro (3º) comboBox para tener los 3 en el mismo form tuyo y guardar todo en uno solo.
Lo demas es que quiero saber como llenar un Combo insertado en hoja excel SIN formulario.
Gracias amigo y un gran abrazo
Hola JoaoM
ResponderEliminarTe adjunto un ejemplo de un COMBOBOX en la hoja, doble click para actualizar la BD
Espero te funcione
Bajar el archivo:
https://dc2.safesync.com/CpWlxBM/Combobox%20dinamico%20en%20hoja.xls?a=V_BsfjcWlcY
Saludos desde Honduras
Hola, estoy intentando hacer lo mismo pero no he podido. Tengo un combobox en una hoja de excel, es decir, no uso un userform. Por ahora lo estoy ubicando así:
ResponderEliminarPrivate Sub ComboBox1_DropButtonClick()
Hoja1.ComboBox1.Clear
For Each celda In Range("E149:E200")
If celda <> Empty Then ComboBox1.AddItem celda.Value
Next
End sub
Tengo un rango especifico que es de la celda E149 a la E200. Cuando lo pruebo me sale error de automatización en la linea de clear (error '-2147467259 (80004005)' en tiempo de ejecucion:error de automatizacion)
Y cuando entra a la linea de ComboBox1.AddItem celda.value sale error 70 en tiempo de ejecución: permiso denegado.
Sin embargo cuando corro tu archivo excel con la tecla F8 no me sale ninguno de estos errores.
Me podrias ayudar porfavor
Hola mayiya
ResponderEliminarBaja este archivo
https://dc2.safesync.com/CpWlxBM/Combobox%20dinamico%20en%20hoja.xls?a=V_BsfjcWlcY
Para actualizar la BD tienes que que dar "DOBLE CLICK", espero te sirva
Saludos
Hola, quisiera que por favor me ayudes con hacer un formulario en el cual hayan 3 combobox, en el primer combobox que esten departamentos, en el 2do (una vez elegido un departamento) se carguen sus respectivas provincias , y luego de elegir la provincia, en el 3er combobox se carguen sus distritos, y que al final al elegir un distrito , la mascara del formulario me muestre unos datos correspondientes al distrito elegido (como poblacion,etc).
ResponderEliminartodos los datos los tengo en una hoja de excel
por favor ayudame, es urgente
ResponderEliminarte lo agradeceria muchisimo
Hola gracias por ayudarnos con tu conocimiento, queria saber como direccionar el codigo para que el combobox cargue el rango desde otra hoja del mismo libro, se puede?
ResponderEliminarHola Gabriel
ResponderEliminarEs sencillo solo tienes que anteponer el nombre de la hoja y listo, como algo asi
Private Sub ComboBox2_enter()
With Sheets("Hoja2")
For Each celda In .Range("A2:A" & .Range("A" & Rows.Count).End(xlUp).Row)
If celda <> Empty Then ComboBox2.AddItem celda.Value
Next
End With
End Sub
Cambia "Hoja2" por el nombre original de tu hoja
Prueba y ya comentaras...
Saludos
Hola, me parece muy bueno este aporte, pero quiero saber como hacer para que no me despliegue repetidos, es decir, puedo tener valores duplicados en mi hoja y solo deseo ver mas o menos lo siguiente, columna "C" 601,602,602,603,604,604,604, que solo me muestre lo siguiente 601,602,603,604 y si se puede de una vez los ordene de mmenor a mayor valor, gracias de antemano.
ResponderEliminarExcelente opción al uso de desref, muchas gracias por compartirla!
ResponderEliminarAunque me pierdo con la expresión "Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row)"
o la las del otro método. Espero algun día entenderlas.
Salud hermano.
Hola
ResponderEliminarTe explico
Range("A2:A" & ...
Significa que el rango comenzara desde A2 hasta la ultima fila ocupada (con datos)
Range("A" & Rows.Count).End(xlUp).Row
Obtengo la ultima fila con datos de la columna A, es decir cuenta las filas a partir de la ultima, en otras palabras de abajo hacia arriba End(xlUp)
Intenta haciendolo manual, ubicate en la ULTIMA FILA de la columna A, luego presiona las teclas Ctrl y Flecha Arriba, te va seleccionar la ultima fila OCUPADA
Espero no enredarte mas jeje
Saludos a todos!
hola no se si me puedas ayudar pero en una base de datos de userform al momento de eliminar un registro no se me descarga del comboBox y al momento de buscar otro dato actua el excel como si no se hubiera eliminado nada
ResponderEliminarque codigo puedo utilizar y en donde????
gracias por tu ayuda
wow, por fin encontré lo que necesitaba, todos los demás códigos similares no me funcionaban y mac carece del campo Row Source de verdad mil gracias por compartir
ResponderEliminarGracias Gerson.
ResponderEliminarMi pregunta es, a este codigo se puede acoplar alguna línea que no permita datos duplicados.
'Cargar Datos Combobox
Private Sub ComboBox1_Enter()
With Sheets("PERSONAL")
Me.ComboBox1.Clear
For Each Celda In Range("F2:F" & Range("F" & Rows.Count).End(xlUp).Row)
If Celda <> Empty Then ComboBox1.AddItem Celda.Value
Next
End With
End Sub
Saludos
Fernando
Hola
ResponderEliminarRevisa este tema y adaptarlo a tu libro
http://gerson-pineda-el-catracho.blogspot.com/2013/06/unicos-en-combobox-activex.html
Saludos
Buenas Noches Gerson!! Muy interesante tu blog y agradecido por las enseñanzas que he obtenido de tu persona. Pocas personas son las que disfrutan impartiendo sus conocimientos y eso lo encuentro en tí.. cómo es posible agregar 2 columnas al combobox? Tengo datos que van unidos y me gustaría seleccionarlos en este combobox e insertarlos en dos columnas contiguas (Nombre de Empresa e Identificación). Ej. Columna A "La Casa de Excel" Columna B "Número Identificador". Saludos desde Venezuela!!!
ResponderEliminarHola Pedro Suarez
ResponderEliminarSera algo asi
Private Sub ComboBox2_enter()
Me.ComboBox2.Clear
For Each celda In Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row)
If celda <> Empty Then ComboBox2.AddItem celda.Value & celda.offset(,1).value
Next
End Sub
Prueba
Saludos
Hola Gerson, antes que nada déjame decirte que tu blog esta muy completo y hay temas muy interesante. Mi duda es ¿ cómo puedo cargar un combobox con dos columnas y al mismo tiempo eliminar los duplicados?, y cuando seleccione un item solamente visualice el dato de la primera columna.
ResponderEliminarHola
ResponderEliminarEs posible que este aporte te sirva de guia, revisalo y adaptalo a tu caso
http://gerson-pineda-el-catracho.blogspot.com/2013/06/unicos-en-combobox-activex.html
Saludos desde Honduras
Hola Gerson. Tengo un UserForm con varios textbox y un commandButton Este último imprime el contrato y a la vez, registra los datos a una hoja(ARCHIVO).
ResponderEliminarEste UserForm realiza contratos a clientes.Hasta aquí todo va bien. Pero ahora he eliminado uno de los textbox reemplazandolo por un ComboBox.
Este cambio, es porque se da la circunstancia de que a veces, se repite el mismo cliente y sus datos personales ( en un nuevo contrato, hay textbox que varian y otros no ). Ese ComboBox contiene un dato único por cliente, así que si escribo esos datos en el, consigo que me aparezcan
los datos en los demás textbox que me interesan y así voy mucho más rápido al confeccionar un nuevo contrato. Pero tengo un problemilla. Si los datos que le proporciono al ComboBox no coincide con ninguno de los que el tiene (nuevo cliente), puedo escribir el nuevo, pero en el resto de los textbox que tengo referenciados, me aparecen los titulos de cada rango y lo suyo sería que apareciese en blanco. Te mando los dos códigos por si puedes ayudarme a solucionarlo.
Private Sub ComboBox1_Change()
Application.ScreenUpdating = False
Sheets("ARCHIVO").Activate
On Error Resume Next
Cells(ComboBox1.ListIndex + 3, 1).Select
C1 = ActiveCell.Offset(0, 5)
C2 = ActiveCell.Offset(0, 6)
C3 = ActiveCell.Offset(0, 7)
C4 = ActiveCell.Offset(0, 8)
C5 = ActiveCell.Offset(0, 10)
End Sub
Private Sub ComboBox1_Enter()
Application.ScreenUpdating = False
ComboBox1.Clear
Sheets("ARCHIVO").Select
Range("J3").Select
Do While Not IsEmpty(ActiveCell)
ComboBox1.AddItem ActiveCell.Value
ActiveCell.Offset(1, 0).Select
Loop
End Sub
Hola
ResponderEliminarSi es cliente nuevo, porque no limpias los textbox?
Textbox1 = ""
Saludos
Hola de nuevo Gerson y gracias por tu pronta respuesta.
ResponderEliminarLo que no se es como combinarlo. Es decir, si ya existe el cliente ha de salir su número identificativo único en el ComboBox y al mismo tiempo el resto de los textbox con los datos de ese cliente. Y si no existe el número identificativo del cliente, que quede ese nuevo número en el ComboBox y los textbox queden limpios para incorporar los nuevos datos,
Hasta ahora solo consigo o lo uno o lo otro.
Hola... tu nombre?
ResponderEliminarNo es fácil ayudar sin ver un archivo
Saludos
Mi nombre es Manuel.
EliminarSi me dices como mandártelo, te lo envío.
Gracias de nuevo
Saludos
tengo un problema, quisiera que un combobox de un archivo me desplegara una lista de otro archivo como lo puedo realizar?????????????????????
ResponderEliminarHola Gerson...
ResponderEliminarQuisiera saber si las formulas son aplicables a un combobox que uso como búsqueda, puesto que no he logrado que funcione...
Te Adjunto la Formula que tengo en mi UserForm que busca en mi Combobox
On Error GoTo Fin
Cells.Find(What:=cmbLista, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
cmbLista.SetFocus
Exit Sub
Fin:
MsgBox "DATO '" & cmbLista & "' NO ENCONTRADO", vbInformation, "Excel e Info"
cmbLista = ""
cmbLista.SetFocus
End Sub
Estimado Gerson Pineda he encontrado tu blog veo que hay buena paticipación espero me permitas interactuar tambien aquí.
ResponderEliminarVisor
Estimado Gerson Pineda he encontrado tu blog veo que hay buena paticipación espero me permitas interactuar tambien aquí.
ResponderEliminarVisor
Hola y un saludo para todos!
ResponderEliminarManuel hare un tema para tu caso, para que lo tomen como ejemplo y quede en el blog
Angy igual hare un archivo y lo subire al blog
Visor
Gracias por tus buenos comentarios, por aqui andamos, toma el blog como tuyo!
Un abrazo!
Buenos días:
ResponderEliminarlo primero gracias por tu inestimable ayuda.
Tengo un combobox que carga datos de una hoja determinada y de una columna.
En la citada columna hay celdas que no tienen datos y al buscar mediante el combobox me muestra tambien los espacios en blanco.
el codigo vba es :
Private Sub ComboBox4_Change()
Dim RAZON_SOCIAL As String
Dim idBusca As String
Dim fila As Integer
Application.ScreenUpdating = False
Sheets("General").Select
Range("F2").Select
fila = 1
RAZON_SOCIAL = ComboBox4
Do While idBusca <> RAZON_SOCIAL
fila = fila + 1
idBusca = Range("F" & fila).Value
Loop
TextBox7 = Range("A" & fila).Value
TextBox5 = Range("B" & fila).Value
TextBox3 = Range("C" & fila).Value
TextBox4 = Range("D" & fila).Value
TextBox6 = Range("E" & fila).Value
TextBox12 = Range("G" & fila).Value
TextBox13 = Range("H" & fila).Value
TextBox14 = Range("I" & fila).Value
TextBox15 = Range("J" & fila).Value
TextBox8 = Range("K" & fila).Value
TextBox9 = Range("L" & fila).Value
TextBox10 = Range("M" & fila).Value
TextBox11 = Range("N" & fila).Value
TextBox16 = Range("O" & fila).Value
TextBox17 = Range("P" & fila).Value
TextBox18 = Range("Q" & fila).Value
TextBox19 = Range("R" & fila).Value
TextBox20 = Range("S" & fila).Value
TextBox28 = Range("T" & fila).Value
TextBox21 = Range("U" & fila).Value
TextBox29 = Range("V" & fila).Value
TextBox22 = Range("W" & fila).Value
TextBox23 = Range("X" & fila).Value
TextBox30 = Range("Y" & fila).Value
TextBox24 = Range("Z" & fila).Value
TextBox25 = Range("AA" & fila).Value
TextBox26 = Range("AB" & fila).Value
TextBox27 = Range("AC" & fila).Value
End Sub
¿Como puedo hacer para evitar las celdas en blanco?
Mil gracias por tu ayuda
Hola
ResponderEliminarViendo tu codigo no encuentro donde estas cargando los datos e tu combobox
Ademas al inicio de este aporte, hay dos formas para llenarlo, trata de adaptarlo, si aun sigues con problemas pues avisa
Saludos
Hola
ResponderEliminarEspero puedas ayudarme, tengo un libro con 5 formularios, cada formulario tiene más de 2 combobox.
No he querido rellenarlos con código porque cuando se vuelve a cargar el formulario se duplican los datos. He intentado utilizar Rowsource dentro del control, si sólo ocupo esta opción en el primer combobox puedo correr el formulario, pero si ocupo esta opción en los demás, al correr el formulario me arroja el error 70:Permiso denegado (todas las listas están en la misma hoja, en diferentes columnas) puedes darme alguna idea de ¿qué hago mal? Muchas gracias por el tiempo Gerson
Hola!
ResponderEliminarDisculpa la demora en responder...
Para cargar los combobox y no se duplique los valores, puedes borrarlos con .Clear; ademas que también se pueden cargar de varias formas
En fin al ver tu archivo sería más adecuado para dar una respuesta certera
Saludos
Hola Gerson,
ResponderEliminarestoy utilizando el código que indicas pero me surge un problema, ambos funcionan pero solo si lo ejecuto desde la consola de desarrollador, es decir no salen automaticamente los valores en el desplegable del comboBox, solo cuando ejecuto la macro desde desarrollador funciona pero si cierro el libro y lo vuelvo a abrir no salen los valores en el ComboBox y debo volver a activarlo desde Desarrollador. No se si necesitaré poner algún código antes para que se ejecute cada vez que abro el libro, lo intente haciendo un Call desde WorkBook_Open pero tampoco funcionó ¿me podrías indicar cual podría ser el problema?
Muchas gracias y felicidades por el Blog
Finalmente lo puede solucionar poniendo el código del ComboBox en ThisWorkBook (especificando la hoja donde estaba el combobox) y haciendo una Call en WorkBook_Open.
EliminarGracias de todas formas
Enhorabuena Oscar Lorenzo!
ResponderEliminarSaludos