Recientemente un lector del blog, Ever David, me recordó una propiedad de los ComboBox (cuadros combinados) que permitía algo muy buscado por la red, como es el completar texto según escribimos, sobre los elementos de un listado.
Explicaré hoy, aprovechando esa característica, cómo utilizar un ComboBox ó Cuadro Combinado(ActiveX) en nuestra Hoja de Excel, para conseguir y obtener en otra celda de la Hoja de Excel, el valor asociado al elemento buscado con este cuadro combinado de control.
Además para un mejor control, añadiremos un poco de código VBA para evitar que se introduzcan elementos no pertenecientes a nuestro listado de base.
Empezaremos nuestro trabajo asignando un nombre a nuestro Listado de trabajo (llamado 'datos':
datos =Hoja1!$A$2:$A$8
siendo el origen de datos
El siguiente paso es insertar el ComboBox ó Cuadro combinado(ActiveX) en la Hoja de Excel; lo que haremos desde Programador > Controles > Insertar > Controles ActiveX > Cuadro Combinado:
Nos aseguraremos que tenemos la propiedad MatcEntry de este control como 1-fmMatchEntrecomplete:
Esta propiedad MatchEntry habilita que según escribamos en este ComboBox se vayan reconociendo los elementos de la Lista origen de datos.
Para darle más potencia a este Control, incluiremos un poco de código más, por lo que haciendo doble click en el control (siempre con el Modo Diseño activado), insertaremos, asociado al Cuadro Combinado(ActiveX), en la Hoja correspondiente del Explorador de proyectos del Editor de VBA el siguiente código, formando nuestra macro de Excel:
Ya podemos probar nuestro ComboBox, desactvamos el Modo Diseño, y desplegamos los elementos... podemos ver como lista los existentes sin problemas, y cómo finalmente lleva a la celda F2 el importe correspondiente al elemento elegido:
Probamos que ocurriría si intentamos buscar escribiendo sobre el cuadro del ComboBox, y veríamos como mientrar introduzcamos caracteres coincidentes, el ComboBox mostrará los elementos más parecidos. en la imagen siguiente se vé como al introducir el caracter 'B' muestra automáticamente el primer elemento que coincide con el buscado:
Por último, comprobamos el funcionamiento de nuestra macro cuando el valor o caracter introducido no coincide con ninguno de los elementos del listado de 'datos':
Explicaré hoy, aprovechando esa característica, cómo utilizar un ComboBox ó Cuadro Combinado(ActiveX) en nuestra Hoja de Excel, para conseguir y obtener en otra celda de la Hoja de Excel, el valor asociado al elemento buscado con este cuadro combinado de control.
Además para un mejor control, añadiremos un poco de código VBA para evitar que se introduzcan elementos no pertenecientes a nuestro listado de base.
Empezaremos nuestro trabajo asignando un nombre a nuestro Listado de trabajo (llamado 'datos':
datos =Hoja1!$A$2:$A$8
siendo el origen de datos
El siguiente paso es insertar el ComboBox ó Cuadro combinado(ActiveX) en la Hoja de Excel; lo que haremos desde Programador > Controles > Insertar > Controles ActiveX > Cuadro Combinado:
Nos aseguraremos que tenemos la propiedad MatcEntry de este control como 1-fmMatchEntrecomplete:
Esta propiedad MatchEntry habilita que según escribamos en este ComboBox se vayan reconociendo los elementos de la Lista origen de datos.
Para darle más potencia a este Control, incluiremos un poco de código más, por lo que haciendo doble click en el control (siempre con el Modo Diseño activado), insertaremos, asociado al Cuadro Combinado(ActiveX), en la Hoja correspondiente del Explorador de proyectos del Editor de VBA el siguiente código, formando nuestra macro de Excel:
Private Sub ComboBox1_change() 'cargamos listado desde la tabla 'datos' previamente creada... ComboBox1.ListFillRange = "datos" Dim ListadoDatos As Range Dim Buscado As Object 'Definimos la variable ListadoDatos Set ListadoDatos = Range("datos") 'Definimos una variable 'buscado' Set Buscado = Nothing 'damos un valor a la variable 'buscado' Set Buscado = ListadoDatos.Find(ComboBox1.Value) If Buscado Is Nothing Then 'Si el dato escrito no está en la lista arroja el siguiente error MsgBox "El dato introducido [" & ComboBox1.Value & "] no se encuentra en la lista", vbInformation, _ "Detalle del error..." Else 'si está, entonces devuelve el valor del 'importe' correspondiente Range("F2").Value = Range("datos").Offset(ComboBox1.ListIndex, 1).Value End If Set ListadoDatos = Nothing Set Buscado = Nothing End Sub
Ya podemos probar nuestro ComboBox, desactvamos el Modo Diseño, y desplegamos los elementos... podemos ver como lista los existentes sin problemas, y cómo finalmente lleva a la celda F2 el importe correspondiente al elemento elegido:
Probamos que ocurriría si intentamos buscar escribiendo sobre el cuadro del ComboBox, y veríamos como mientrar introduzcamos caracteres coincidentes, el ComboBox mostrará los elementos más parecidos. en la imagen siguiente se vé como al introducir el caracter 'B' muestra automáticamente el primer elemento que coincide con el buscado:
Por último, comprobamos el funcionamiento de nuestra macro cuando el valor o caracter introducido no coincide con ninguno de los elementos del listado de 'datos':
Excelente funcion, ahora si que esta completita... Gracias!!!
ResponderEliminarHola,
ResponderEliminaruna pregunta,en este ejemplo el ComboBox se encuentra en la misma hoja en donde están los datos(o Tabla)... pero si yo deseo poner el ComboBox en otra hoja ¿Qué modificación debo hacerle al código?
Por ejemplo imaginemos que yo quiero poner el control en la hoja1 y los datos están en la hoja2.
Te agradeceré mucho si me ayudas.
Hola,
Eliminarentiendo que deseas incrustar el combobox en la hoja11, etando los datos en la hoja2... en este caso, obviamente el código lo deberáss incluir en la hoja2 del explorador de proyectos, y cualquier referencia a rangos, como ListFillRange o Range debería llevar la expresión Sheets("Hoja2"). delante.
Slds
Ok, muchas gracias.
EliminarHOLA, CÓMO CARGAR DATOS A UN COMBOBOX SIN MOSTRAR LA HOJA DE DONDE PROVIENEN LOS DATOS?.
ResponderEliminarHE CREADO UN FORMULARIO, PERO CUANDO ACTIVO EL COMBOBOX PARA MOSTRAR TODOS LOS DATOS DEL ELEMENTO SELECIONADO LEÉ TODOS TODO LOS REGISTROS DESDE EL PRIMERO HASTA EL ULTIMO Y LUEGO ME MUESTRA LOS DATOS Y LO VUELVE A HACER CADA VEZ QUE SELECIONO UN ELEMENTO DEL COMBO, CÓMO PUEDO EVITAR ESTO?
Hola,
Eliminarno entiendo que te muestre los datos junto a la hoja de procedencia... supongo que habrás indicado la propiedad ListFillRange, seleccionando un rango de una hoja... lo raro es que marque la procedencia y no únicamente los valores del rango???.
Para resolver la otra cuestión que planteas podrías añadir una línea al principio del código asociado al evento click del combobox (supongo será este evento el que tengas):
Combobox1.clear
así limpias la carga inicial de elementos del combobox...
Espero haberte entendido bien.
Slds
P.D.: Por favor, evita escribir en mayúsculas, esto equivale a gritar
;-)
Hola y buenas tardes.
ResponderEliminarHe aplicado tu código y me ha ido bien, aunque solo lo necesito para que me muestre los datos de una columna en particular.Pero ahora lo que necesito es saber si puedo tomar el dato registrado en el combobox y asignarlo a un filtro avanzado para que me muestre la información relacionada a este. Por ejemplo, he insertado el combobox para que me muestre los nombres de personas de una columna en particular, ahora basandome en el nombre que ha quedado en el combobox, quiero utilizarlo para, a travez de un filtro avanzado, me muestre todos los registros que coincida con ese nombre en particular. ¿Se puede hacer esto?. Gracias por tu respuesta
Hola Frdy Martín,
Eliminarsi es posible,
sólo tendrías que incluir una variable como resultado del combobox en el criterio del Filtro.
Es decir, asignas como variable dentro de la macro:
filtro=Range("datos").Offset(ComboBox1.ListIndex, 1).Value
ActiveSheet.Range("datos").AutoFilter Field:=1, Criteria1:=filtro
y debería funcionar.
Slds
Hola Ismael, he pasado este codigo de filtro al codigo del ejemplo que tu das, pero me aparece un error. lo escribi despues del else.
EliminarHola,
Eliminarantes del End if, debe funcionar.. asegúrate que los nombres de los rangos coinciden
Slds
Hola estimado, quería saber algo parecido a Frdy Martin, exactamente después quedar el codigo o nombre en el combox, quiero que se muestre en la columna siguiente todos los valores que corresponden a ese código, es decir si en combox se elige el código 85690, en la columna siguiente de aparecer cinco celdas con los nombres de los medicamentos que corresponden a ese código, que no es otra cosa que numero de factura y así cada vez que se selecione el código (numero factura) se muestren en la columna contigua su contenido.
ResponderEliminarSi no es mucha molestia pudieras colocar el código completo desde el inicio con los cambios.
agradeciéndote de antemano
juan
Hola Juan,
Eliminarrealmente para subir el código completo necesitaría disponer de la estructura de datos de tu hoja.
En todo caso, ambos planteamientos de desplegar elementos en base a otra previa elección se soluciona de una manera muy sencilla sin macros, echa un vistazo a
http://excelforo.blogspot.com.es/2010/04/validacion-de-celdas-anidadas-y.html
En todo caso, si necesitas que te desarrolle la macro que necesitas puedes enviármelo a
excelforo@gmail.com
Pero por favor, lee primero las Normas de uso del blog.
Un cordial saludo
ok estimado revise tu enlace,pero si es posible preferiría que veas el archivo que te envió detallando lo que deseo, ojala se pueda lo que deseo, en todo caso me doy por atendido y muchas gracias por tu tiempo.
EliminarJuan
Ok,
Eliminarsi lo prefieres envíamelo por mail.
Slds
Hola linda tarde.
ResponderEliminarEstoy probando la macro del ejemplo, pero tengo un pequeño problema, ya que no importa lo que escriba, siempre me manda el mensaje de que el dato introducido no se encuentra, aunque si se encuentra.
Tendrá que ver que la lista (aunque esta en la misma hoja) la estoy jalando de otro archivo a través de una formula?
espero puedas ayudarme
Hola Yam!
Eliminaren el eejmplo el ComboBox lo llenamos con el campo 'Producto', al que hemos asignado un nombre definido 'Datos'; si tus valores están en otro Libro tienes que nombrarlo adecuadamente, o bien importar esa Tabla a tu Libro de trabajo actual, y actuar y nombrar sobre éste.
Un cordial saludo
Gracias por responder Ismael,
Eliminarlo que estoy haciendo es importar la tabla, solo que como esa tabla va ir actualizándose diariamente, lo hice con formulas, de esta forma:
='C:\Users\Documents\Pruebas\Sistema - 13062013\[Base clientes.xlsx]Hoja1'!B5
no cómo texto. crees que ese sea el problema?
A primera vista parece que ese puede ser el problema...
Eliminarya que tu no has importado la Tabla en conjunto, sino vinculado celda a celda entre Libros.
Trata de realizar una importación de datos desde la Ficha Datos > Obtener Datos Externos, asi importarás y tendrás una Tabla actualizable...
Slds cordiales
Gracias, si era eso.
EliminarSaludos.
Hola Ismael,
ResponderEliminarDe que manera puedo hacer que el texto predictivo del ComboBox reconozca, NO el principio del texto, sino cualquier parte del texto.
En tu Ejemplo: en el combobox empezar a escribir "x001", y entonces en la lista me aparezca "AA012-x001" como el resultado que más se le parece?
Gracias!
Hola, no creo que lo que busques sea un 'texto predictivo' en sentido estricto, ya que este tipo de textos funcionan reconociendo la primera, segunda, etc letra y restringiendo cada vez más la lista.
EliminarParece que lo que quieres más bien es una búsqueda de elementos de una lista que cumplan una condición, que sería que contuvieran los caracteres que se vayan introduciendo en el ComboBox.
Yo intentaría generar un evento combobox_change que cada vez que cambie el valor introducido refrescara el combobox con un rango (quizá una collection) que mostrara únicamente los elementos del listado original que contiene los caracteres...
pero esto no mostrará según escribes, si no que permitiría desplegar elementos según escribimos.
Claro está, debido a las búsquedas y refrescos del combobos constantes, no lo creo indicado para grandes listas.
Espero te haya podido dar una idea.
Slds
Hola Ismael
ResponderEliminarSe me ocurre tener el mismo combobox pero que cuando tipee me devuelva las palabras congruentes con las letras tipeadas en formas alfabética
Espero posible respuesta
Saludos
Hola Amadeo,
Eliminarla función ade autocompletar texto en Excel es muy restringida , de hecho sólo se consiguen con herramientas como la explicada en este post o algún otro pequeño truco (por otro lado bastante burdo).
Sólo lee algunos de los comentarios de más arriba...
Lo siento pero esto es Excel.
Slds cordiales
Como puedo aplicar este mismo concepto (el procedimiento), pero a un "control de formulario", disculpa no pretendo ser redundante, lo que quiero lograr es que según introduzca el texto en el "combobox", este se auto complete, ya sea que lo que introduzca esta al final, principio o en medio del texto del "combobox", previamente llenado con un rango de datos de mi hoja de calculo.
ResponderEliminarDe antemano mil gracias...!
Hola,
Eliminarel procedimiento sería el mismo (misma propiedad) para un control (combobox) de formulario..
pero el autocompletado siempre irá al escribir de izquierda a derecha...
Saludos
Perdón, creo que no me deje entender, lo que necesito es que cuando este en el "combobox" y lo que escriba no necesariamente estará al principio, si no que puede estar al final o en medio - Ej: si empiezo a escribir "ANT" se autocompletara la lista... "ANTEZANA, zona los Cedros # 1225 telefono 4420958" (esto ya lo hace), pero lo que yo necesito que haga, es que cuando ingrese, por decir, los tres últimos dígitos de su teléfono, que seria "958" me muestre el resto de los datos "ANTEZANA, zona los Cedros # 1225 teléfono 4420958" o puede que ingrese el número del domicilio "1225" (esto para datos que estuviesen en medio) y cabe considerar que puede haber mas de uno que casualmente tienen esos tres últimos dígitos de teléfono, se desplace la lista y poder escoger la opción mas conveniente.
ResponderEliminarEspero tu ayuda y nuevamente GRACIAS...!
Hola JR,
Eliminarcreo sí comprendí lo que planteabas... no creo posible tal cosa, ya que el autocompletado siempre irá al escribir de izquierda a derecha..
Lo siento
Saludos
Bueno, la verdad observe esta funcionalidad en otro vídeo tutorial, lo malo es que el fulano que colgó este, no quiere compartir el código, pero de todas maneras GRACIAS POR TU TIEMPO.
ResponderEliminarBuenas Ismael,
ResponderEliminarTengo una pregunta, actualmente tengo un userform, el cual tiene un combo box; donde tiene una lista de nombres. Con esto, lo que necesito es que cuando le de click a un botón, después de haber escogido algún nombre en el combo box, se cree una nueva hoja que tenga como nombre el que aparece en el combo box. Además, esta hoja debe tener siempre las mismas especificaciones como por ejemplo: un cuadro, que aparezca en ciertas celdas una información que se ve reflejada en los labels del userform.
Gracias.
Hola,
Eliminaryo generaría un duplicado de una hoja plantilla con las especificaciones de información que necesites..
luego asocia el código de duplicar hoja:
Sheets("Plantilla").Copy After:=Sheets(Worksheets.Count)
al botón o al evento de Change del combobox... no olvides cambiar el nombre a esa nueva hoja
Sheets(Worksheets.Count).Name = Combobox1.value
Espero te oriente
Saludos
Buen día, de casualidad sabrá como se aplica la propiedad de MatchEntry y AutoWordComplete en VBA , más especificamente para fmMatchEntryNone. He intentando:
ResponderEliminarActiveSheet.OLEObjects("ComboBox1").MatchEntry= 0
ó
ActiveSheet.OLEObjects("ComboBox1").MatchEntry= fmMatchEntryNone
Pero me marca error, no entiendo por que si hasta la propiedad viene en la página de Microsoft. A diferencia de ActiveSheet.OLEObjects("ComboBox1").ListFillRange = "ejemplo" que si me acepta el còdigo.
Saludos y gracias.
Hola David,
Eliminartendría que mirarlo.. pero por que no simplemente activas el control ActiveX y desde su ventana de propiedades cambias .Matchentry a la opción que deseas??
Slds
Gracias por la pronta respuesta.
EliminarPretendo hacerlo desde VBA por que tengo que crear una gran cantidad de ComboBox, ( y desde VBA) por lo que si ya les puedo poner esa propiedad a cada uno desde código, me ahorraría muchísimo tiempo. Como menciono, por ejemplo, a cada uno ya le pongo su rango de items con .ListFillRange, pero como requiero hacer ComboBox cuyo método de búsqueda sea de ¨sugerir autocompletado¨ ( tipo búsqueda de google),el cual ya sé hacer (manualmente), pero lo único que me detiene es esta propiedad de MatchEntry y AutoWordComplete, si conociera bien la sintaxis, o como cambiarlas desde código, creo que podría concluir esta actividad.
Cabe resaltar que el archivo genera combobox definidos por el usuario, asi que viéndolo desde el punto de vista como tal, entendería que el usuario no sabe, y no tiene por que cambiar las propiedades manualmente.
Saludos y gracias nuevamente.
Siempre podrías copiar y pegar el mismo Control ;-)
EliminarEn todo caso, si quieres hacerlo desde código prueba con:
ActiveSheet.OLEObjects("ComboBox1").Object.MatchEntry = 0
o el valor que quieras 0,1 ó 2
Saludos!
Intuía que mi error era algo sencillo.
EliminarHe probado este código y funciona a la perfección.
Gracias por la info,ah!y también era AutoWordSelect= False, que de igual manera funciona bien.
Hola, antes que nada felicitarte por la gran ayuda que haces con el blog, el código de validación esta funcionando muy bien. Tengo una duda, en mi caso yo tengo en mi lista del combobox diversos productos, varios con nombres similares, por ejemplo "Curso básico", " Curso Intermedio", y "Curso avanzado", cuando empiezo a escribir el nombre de producto en el combo box, si escribo por ejemplo " cuso", me da el error, eso está bien porque está mal escrito, pero si escribo sólo "curso" me lo válida como correcto, a pesar de no haber completado todo, y dando un valor errorneo en la celda, ¿como puedo hacer para que la validación de la celda sea más exaustiva, sin perder la propiedsd de autocompletado (en ocasiones no autocompleta o demora, por eso suele aparecer ese error).
ResponderEliminarDe antemano, muchas gracias por la respuesta.
Hola, nuevamente yo, sólo para adicionar un detalle, cuando escribo una vocal tampoco me lo muestra como error, por ejemplo "o", ya que la palabra curso tiene la vocal como parte de su cadena de caracteres, pero si escribo "oo" si me da el erró porque la cadena de las 2 letras o juntas no lo encuentra.
EliminarHola Yurigouki,
Eliminarla cuestión es que estamos asociando al evento Change de un combobox (esto es, cada vez que cambia algo en el desplegable) una búsqueda.. que en este caso realizamos con el método .Find
Como puedes ver este método lo hemos dejado muy abierto, es decir, no estamos buscando que coincida exactamente con el contenido buscado o/y con mayúsculas-minúsculas.. por tanto nos vale cualquier coincidencia por aproximada que sea...
Podrías ajustar una coincidencia exacta en el método Find, pero esto te ocasionaría que a cada letra escrita saltara el mensaje de fallo.
A veces tenemos que optar por soluciones intermedias ;-)
Saludos
buenas tardes, tengo un problema y me gustaría saber si me puedes ayudar... Tengo un listado de nombre el cual se va actializando y con ello el combobox, pero muchos de ellos están repetidos y necesito que en el combobox sólo aparezac una vez... No sé cómo hacerlo... Mil gracias de antemano
ResponderEliminarHola Diego,
Eliminarecha un vistazo a este post:
http://excelforo.blogspot.com.es/2012/03/vba-objeto-collection-para-lograr.html
Seguro te sirve.
Saludos
Buenas tardes. Excelente tutorial. Me ha ayudado mucho.
ResponderEliminarLo que quisiera saber es si se puede hacer que a medida que vaya introduciendo letras en el combobox no solo autocomplete con la primer coincidencia que encuentre sino también que se despliegue la lista de dicho combobox con las posibles coincidencias.
Por ejemplo, tengo una lista que tiene 2 clientes que se llaman Luis, y lo que quiero es que cuando teclee la letra L se despliegue el combo y me muestre esos 2 nombres.
Espero haberme explicado bien.
Desde ya muchas gracias. Saludos.
Hola Guillermo,
Eliminarsubiré una explicación al respecto en cuanto sea posible.
Un cordial saludo
Hola. Tengo un problema con mi Combobox. Funciona muy bien, pero cuando le doy click a la lista desplegable, se hac epequeño, el botón de desplegar y la letra de lo que está adentro... tan pequeño que después queda todo blanco y desaparece. Traté en las propiedades del objeto de bloquear el tamaño y eso, pero no funciona. Gracias
ResponderEliminarHola Diena14,
Eliminarmuy raro ??... no tendrás algún evento tipo MouseOver, GetFocus, que reduzca las dimensiones del objeto?
No se me ocurre qué más puede ser
Slds
Buenas mi estimado Ismael Romero, he implemetado el codigo que aportas en VBA pero al correr el codigo me sale un error en la linea de codigo: Set ListadoDatos = Range("Tabla"), "Tabla" es el nombre que le di a mi tabla dinamica, mi duda es en que momento hago esto que escribiste, "Empezaremos nuestro trabajo asignando un nombre a nuestro Listado de trabajo (llamado 'datos':
ResponderEliminardatos =Hoja1!$A$2:$A$8 siendo el origen de datos"; ¿es en el moemnto de asignar un rango a mi tabla dinamica?
Hola Roger,
Eliminarel momento es lo de menos.. pero para que funcione correctamente se debe asignar ese nombre definido al primer campo de la tabla... por lo que no sería correcto empezar con:
Set ListadoDatos = Range("Tabla")
que recoge ambos campos de tu origen... ya que únicamente queremos mostrar los códigos.
Asigna nombre al primer campo y sigue los pasos descritos
Un cordial saludo
y, ¿como asigno nombre al primer campo?, disculpa que te pregunte dos veces.
EliminarPara asignar nombre selecciona el rango, en este caso el campo en cuestión, y desde el cuadro de nombres introduces el Nombre Definido.
EliminarHay una categoría en el Blog destinada a esta herramienta de Nombres definidos:
ver
Slds
Gracias por su ayuda, Mi estimado Ismael Romero, me ha servido mucho su ayuda. Saludos
Eliminarexcelente aporte, es lo que necesito , pero al copiar tu código me da error "1004" seguramente algo hice mal, espero tu respuesta
ResponderEliminarHola,
Eliminarprobablemente te falte generar en la hoja de cálculo un Nombre definido llamado 'Datos'...
?
Slds
Hola mi nombre es Carmen
ResponderEliminarMi pregunta es como le puedo hacer que cuando utilizo la rueda desplazamiento del raton la lista se separa del combo y entre mas muevas la rueda desplazadora mas se aleja el listado. como le puedo hacer para que no se mueva me podrian ayudar por favor.
Hola Carmen
Eliminar¿¿??
quieres decir que al hacer Zoom con la rueda del ratón se separa el desplegable del combobox???
Es algo muy raro.. quizá sea un tema de refresco de pantalla?
hola ismael romero
ResponderEliminarnecesito ayuda en esto se lo agradeceria
un suponer a2*b2*c2*c1/12 , ahora c2 es un valoe ejemplo 6 y en otra celda tengo 5 los resto me tiene que quedar 1 pero que se refleje en la misma celda c2 y al mismo se quede asi si quitara el 5 y lo limpiara para volver a operar
???
EliminarLo siento.. no entiendo la pregunta
hola copie tu codigo para implementarlo en mi base de datos pero a la hora de correr el codigo me da un error no se aque se debe.
ResponderEliminarHola Rebeca,
Eliminarhabría que saber cómo tienes construido tu origen y qué error te devuelve el código
;-)
En todo caso, para algo sencillo como el ejemplo, asegúrate que el nombre de la Tabla (del origen de datos) coincide.
Saludos
hola tengo el siguiente código pero necesito que el combobox se auto complete a media que escribo el dato por que asi no se autocompleta y es una base muy grande para seleccionarlo con el mouse
ResponderEliminarPrivate Sub ComboBox2_Change()
Dim var2 As String
If ComboBox2 = "" Then
Else
CommandButton1.Locked = False
Sheets("proveedores").Activate
If ComboBox2 = Empty Then
MsgBox "Para modificar primero seleccione proveedor", vbInformation, "Almacen"
ComboBox2.RowSource = A
End If
var2 = ComboBox2.Column(0)
Cells.Find(What:=ComboBox2.Value, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False).Activate
If var2 = ActiveCell.Value Then
TextBox1.Value = ActiveCell.Value
TextBox2 = ActiveCell.Offset(0, 1)
TextBox3 = ActiveCell.Offset(0, 2)
TextBox4 = ActiveCell.Offset(0, 3)
TextBox5 = ActiveCell.Offset(0, 4)
TextBox6 = ActiveCell.Offset(0, 5)
TextBox7 = ActiveCell.Offset(0, 6)
TextBox8 = ActiveCell.Offset(0, 7)
TextBox2.Locked = False
TextBox3.Locked = False
TextBox4.Locked = False
TextBox5.Locked = False
TextBox6.Locked = False
TextBox7.Locked = False
TextBox8.Locked = False
End If
End If
End Sub
Private Sub ComboBox3_Change()
If ComboBox3 = "" Then
Else
CommandButton1.Locked = False
Sheets("proveedores").Activate
If ComboBox3 = Empty Then
MsgBox "Para modificar primero seleccione proveedor", vbInformation, "Almacen"
ComboBox3.ListIndex = 0
ComboBox3.SetFocus
End If
var3 = ComboBox3.Column(0)
Cells.Find(What:=ComboBox3.Value, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False).Activate
If var3 = ActiveCell Then
TextBox2 = ActiveCell
TextBox1 = ActiveCell.Offset(0, -1)
TextBox3 = ActiveCell.Offset(0, 1)
TextBox4 = ActiveCell.Offset(0, 2)
TextBox5 = ActiveCell.Offset(0, 3)
TextBox6 = ActiveCell.Offset(0, 4)
TextBox7 = ActiveCell.Offset(0, 5)
TextBox8 = ActiveCell.Offset(0, 6)
TextBox2.Locked = False
TextBox3.Locked = False
TextBox4.Locked = False
TextBox5.Locked = False
TextBox6.Locked = False
TextBox7.Locked = False
TextBox8.Locked = False
End If
End If
End Sub
Hola!,
Eliminar¿has configurado las propiedades del combobox como se indica en este post (arriba)??
Esa sería la manera de que se autocomplete y no tener que seleccionar...
Saludos
Saludos, veo que eres de los que si toman importancia a sus seguidores :D
ResponderEliminarMe agrado tu tema al inicio expuesto (VBA: La propiedad MatchEntry en un ComboBox.)
Deseo me ayudes en lo siguiente con respecto de tu tema expuesto:
1.- Agregar un Boton1 para que cuando le de clik, el ComboBox1 quede limpio.
Hola Dann,
Eliminarla idea sería en ese nuevo botón añadir el código:
Private Sub CommandButton1_Click()
ComboBox1.Value = ""
End Sub
Slds
y algo más extremo (eliminar los item a desplegar:
EliminarPrivate Sub CommandButton1_Click()
ComboBox1.ListFillRange = ""
End Sub
Probé tus 2 métodos y si son correctos (ya que ambos usan botón ActiveX). Perdón sino especifique, que deberían ser con botón de control de formulario y no con botón de control ActiveX.
EliminarMe podrías corregir ello por favor?? Es que le quiero usar con una macro en su respectivo modulo. XD gracias.
En un UserForm, en principio debería funcionar algo simialr a esto:
EliminarPrivate Sub CommandButton1_Click()
ComboBox1.Clear
End Sub
Saludos
jeje creo debo ser mas especifico aún. No estoy usando Userform. Lo que deseo es que el código este dentro de un modulo independiente y que este código responda al botón de control de formulario que esta insertado en la hoja excel; luego a dicho botón agregarle la macro de limpiar.
EliminarIntente hacerlo asi hace ya mucho pero al ejecutarle me sale "se requiere un objeto".
Sub Limpiar()
ComboBox1.Clear
End Sub
Espero no molestarte con el problemita jeje
si vas a incluir algún tipo de código tienes que emplear objetos que puedan soportar código
Eliminar;-)
mmm ok entendido. Pero te cuento, eh estado probando tu codigo expuesto al inicio, le eh quitado la parte donde sale el mensaje de que no halla lo buscado (ya que era algo molesto que salia en cada letra borrada de la palabra). Luego la probé, pero al borrar con suprimir o retroceso, el combobox copiaba el encabezado del titulo de precios y lo pegaba en F2; Hay alguna forma de evitar este defecto??
Eliminarpodrías añadir el código, en lugar de al evento change, al evento LostFocus
Eliminarasí se activará al salir del control... debería funcionar.
Slds
Me olvidaba también que, al seleccionar un Item de la lista del ComboBox1, este aparece en la celda "F2"(como en tu caso). Pero desearía que me ayuden en lo siguiente:
ResponderEliminar2.- Que al elegir el primer item de la lista, este aparezca en la celda "F2", al elegir el 2do nuevo item, este aparezca en F3, y asi sucesivamente (digamos que las celdas a trabajar sean de "F2:F12"). Osea también que si una de las celdas ya tiene algún valor pase al siguiente. Y cuando llegue a la celda "F12" y quiera ingresar otro mas, me avise que ya no puedo ingresar mas porque eh culminado el rango de celdas permitidas a llenar.
Como serian los codigos?? (Att, un Novato)
Hola,
Eliminaresto es algo más elaborado,
la idea es modificar la línea:
Range("F2").Value = Range("datos").Offset(ComboBox1.ListIndex, 1).Value
por una variable, por ejemplo:
UltFila=range("F"&Rows.Count).end(xlup).offset(1,0).row
cells(UltFila,"F").Value = Range("datos").Offset(ComboBox1.ListIndex, 1).Value
además tendrías que añadir un control o similar, quizá un IF..THEN.. para el caso que la nueva variable 'Ultfila' sea igual a 12 me saque del procedimiento.
IF UltFila>=12 THEN Exit Sub
Saludos
La parte del introducir el:
EliminarIF UltFila>=12 THEN
Exit Sub
No me sale o no se como hacerlo. podrías ser mas detallista en esa sección por favor.
UltFila=range("F"&Rows.Count).end(xlup).offset(1,0).row
EliminarIF UltFila >= 12 THEN
Exit Sub
ELSE
cells(UltFila,"F").Value = Range("datos").Offset(ComboBox1.ListIndex, 1).Value
END IF
Slds
Excelente, me funciono de maravilla, gracias. Te daría manito arriba pero no hay donde jeje.
EliminarUn detalle mas; al elegir un item, su valor se va a F2, pero quisiera que luego de haber elegigo el iten, el combobox1 quede limpio luego de haber elegido al instante y asi elegir el siguiente. Cual seria la variacion??
;-)
Eliminarpues lo comentado, para dejar vacío el ComboBox se suele aplicar:
ComboBox1.Value=""
sigo hablando de controles ActiveX o de UserForm
Slds
Gracias por tu ayuda anteriormente XD.
ResponderEliminarTendrás algún otro foro que tengas sobre este tema:
PARPADEO DE CELDAS VACÍAS E INTERRUMPIDAS AL INGRESAR DATOS
En Excel.
1.- Que desde la celda "A5:A10" , la celda "B3" y el "C7" las cuales están vacías, parpadeen.
2.- Al ingresar algún dato en dichas celdas dejen de parpadear.
3.- Al borrar el dato ingresado en dichas celdas, nuevamente vuelvan a parpadear.
Si lo tienes, pasa el link para visitarlo, gracias.
Saludos.
Hola Dann,
Eliminarno se si haya alguno cosa al respecto en la categoría de macros.
Echa un vistazo
http://excelforo.blogspot.com.es/search/label/Macros
Slds
Hola Buenos Dias
ResponderEliminarComo hacer para que dentro de un formulario que contiene un combox por dentro. Dependiendo de lo que yo seleccione en el combobox el me realice un calculo que ya tngo listo
Osea que si yo selecciono Anual
ResponderEliminarme haga un calculo
si selecciono Trimentral
me haga un calculo
Si selecciono mensual
Haga otro
Hola María José,
Eliminarla idea sería asociar con un condicional por ejemplo la acción a realizar, asociandolo a un evento Change del ComboBox (o uno Exit):
If Combobox1.Value="Anual" then
calculo a realizar
elseif combobox1.Value="Trimestral" then
calculo a realizar
elseif combobox1.Value="Mensual" then
calculo a realizar
end if
dependiendo del número de casos, quizá un SELECT CASE fuera más eficiente...
Saludos
¿Sigue vigente ListFillRange? al ingresarlo en mi codigo, me señala que no existe ese metodo.
ResponderEliminarHola Martín,
Eliminarun gusto saludarte igualmente.
Sigue activo,, ojo por que depende de si trabajas con un control ActiveX o con un control de UserForm
Un cordial saludo
Hola Ismael, mi consulta es ¿se puede hacer una correspondencia en word desde excel, una lista de registros?, si bien se uede hacer con un registro, pero no me ha salido hacerlo en forma de una lista por ejemplo:
ResponderEliminar1. AAAAAAAAAAAAAAA, identificado con DNI Nº 111111111111, con Domicilio Real en Jr. Gabriel Bejar N° 844 Urb, Santa Luzmila , del Distrito Comas y Provincia de Huari.
2. BBBBBBBBBBBBBBBBBB, identificado con DNI Nº 22222222222222, con Domicilio Real en el Jr. Zorritos N° 1399 Block 64 Dto. 204 , del Distrito Comas y Provincia de Huari.
3. CCCCCCCCCCCCCCCCCCC, identificado con DNI Nº 33333333333333333333, con Domicilio Real en Av 23 de Setiembre Mz. M. 5 Lt. 15, del Distrito Carbayllo y Provincia de Huari.
4. DDDDDDDDDDDDD, identificado con DNI Nº 44444444444444444, con Domicilio Real en el Jr. Mariano Melgar N° 186 Collique I Zona , del Distrito Comas y Provincia de Huari.
5. EEEEEEEEEEEEEEEE, identificado con DNI Nº 5555555555555, con Domicilio Real en el Jr. San Isidro Nº 386 Urb. Popular San Carlos , del Distrito Comas y Provincia de Huari.
6. FFFFFFFFFFFFFF, identificado con DNI Nº 666666666666666, con Domicilio Real en Psj. Ancash Nº 131 Urb. San Felipe , del Distrito Comas y Provincia de Huari.
gracias por su ayuda y otro, mi base de datos de excel con macros se puede haver para que sea multiusuario en red local, y que modifiquen todos los ususarios de la red local al mismo tiempo?.
Atte.
Julio Reza
Hola Julio,
Eliminaren realidad al seleccionar desde Word la 'lista existente' (en Combinar correspondencia) te debería reconocer todos los registros..
de todas formas, podrías asegurarte que lo reconoce, convirtiendo el rango de Excel en tabla (en Excel ficha Insertar > Tabla)
En general Excel no es multiusuario, si bien tienes un par de opciones:
1-convertir el fichero en Libro compartido.. perdiendo bastante funcionalidad
2-trabajar desde la nube (OneDrive) y empleando Excel online.. pero igualmente con funcionalidades limitadas
Saludos
Hola Ismael, te hago una consulta.
ResponderEliminarTrabajo con una Mac, uso excel 2011 ya que con 2016 se limitaron muchas cosas.
Agrego un combobox o un botón por ejemplo, y al hacer click en cualquiera de los dos, no pasa nada, no va a vba. Si hago click derecho no tengo la opción para ir a propiedades del combobox, por lo tanto no se como se llama mi combobox que creo. Por favor ayuda! Gracias!!
Hola Maca,
Eliminarlo siento pero el entorno de Mac es bastante distinto al de Windows (con códigos de programación en algunos casos diferentes).
Mejor consulta en un foro o blog especializado en mac.
UN saludo y suerte
Buenas tardes Ismael
ResponderEliminarEs posible hacer dependientes a dos combobox, sin la necesidad de usar una ventana emergente, ya que necesito que se seleccionen desde la misma hoja de Excel.
Esto es para mostrar las distintas opciones que tiene cada campo de mi combobox 1
Hola Josué,
Eliminarsi te refieres a que un Combo2 muestre unos elementos u otros según la elección en un Combo1, claro que no hace falta 'ventana emergente'...
Puedes emplear los Combobox 'ActiveX', y añadirles la programación correspondiente...
Saludos
Hola, estaria necesiatdno ayuda con VBA. El problema que tengo es que no se como hacer, para que los datos del combobox esten ya cargados apenas abra el lirbo. saludos
ResponderEliminarHola,
Eliminarlo que puedes hacer es añadir directamente en la ventana de propiedades del Combobox la propiedad:
.ListFillRange = "datos"
así lo tendrás cargado siempre, y no solo como en el ejemplo cuando se produce un cambio
Slds