¿Cómo filtrar un combobox con una coincidencia de palabra en cualquier lugar del texto?

A ver si alguna alma caritativa le echa una mano a este pobre novato.
Estoy intentando programar un combobox con búsqueda de palabra en cualquier lugar del texto.

Se me ha ocurrido hacer esta macro y llamarla desde combobox46_change
Option explicit
Sub buscar_texto_instr ()
Application.ScreenUpdating=false
Dim textocmb as string
Dim coincidenciabusqueda as integer
Dim celdabusqueda as range
Textocmb=me.combobox46.value
Set celdabusqueda = Range("i60")
Textocmb=lcase(textocmb)
For celdabusqueda to empty
Celdabusqueda.value=lcase(celdabusqueda.value)
Coincidenciabusqueda=insrt(textocmb,celdabusqueda)
If coincidenciabusqueda>0 then
Combobox46.additem activecell.value
End if

Celdabusqueda=Celdabusqueda.offset(1,0).select
Next celdabusqueda

Application.ScreenUpdating=true

End sub

¿Funcionara correctamente? ¿Hay alguna manera más efectiva de conseguirlo? ¿Quizás cargando el combobox con un autofiltro?
P.D. ( Ahora mismo no puedo probarlo, ha hecho puf mi portátil, pero las ganas de novato hacen que le de mil vueltas al asunto hasta el punto de usar las notas del móvil para generar código jajaja)

1 Respuesta

Respuesta
2

H o l a:

Te anexo el código

Option Explicit
Dim cargando
Private Sub ComboBox46_Change()
'Por.Dante Amor
    Dim h2, col, dato, i
    Application.ScreenUpdating = False
    If cargando = True Then Exit Sub
    Set h2 = Sheets("hoja2")
    col = "I"
    cargando = True
    dato = ComboBox46
    ComboBox46.Clear
    For i = 60 To h2.Range(col & Rows.Count).End(xlUp).Row
        If UCase(h2.Cells(i, col)) Like "*" & UCase(dato) & "*" Then
            ComboBox46.AddItem h2.Cells(i, col), 0
        End If
    Next
    ComboBox46 = dato
    '
    'En esta parte se activa la lista
    Range("D6"). Activate
    ComboBox46. Activate
    ComboBox46. DropDown
    '
    Application.ScreenUpdating = True
    cargando = False
End Sub

Nota: Debes poner la propiedad MatchEntry del combo en "2 - fmMatchEntryNone":


F e l i z   A ñ o   N u e v o . Recuerda valorar la respuesta. G r a c i a s

Muchas gracias por responder tan pronto y ser tan eficaz.

Es interesante tu lógica, aunque como novato que soy, me generan un mar de dudas. No entiendo que función tiene la variable "cargando", ¿no hará que sólo me busque por la primera letra introducida ya que la segunda vez que cambie el valor será "true"? ¿O es que la variable se destruye al llegar al end sub ya que es una variable declarada en "private sub"?

¿no debería declararla?

Otra cosa que no entiendo es la manera en que declaras las variables, al no indicar de que tipo, ¿serán de tipo "Variant"? 

¿Porque activas la celda "D6"?

Perdona que te acribille, jeje, pero para aprender hay que preguntar, mil gracias de antemano y FELIZ AÑO NUEVO 

H o l a:

Te respondo tus inquietudes.

1. La función de la variable "cargando" es para saber si se está cargando el combobox, ya que el evento en función es el "change", cada que haces un additem al combobox estás cambiando el combobox, es decir, está entrando nuevamente al evento "change" lo que provocaría que entraría a cargar una y otra vez (entraría en un loop); entonces si está en true se sale del evento.

2. Cada que se sale del evento se destruye la variable "cargando".

3. La variable "cargando" se declara al principio como global.

4. En VBA no es necesario declarar las variables, solamente en algunos casos, VBA las declara en automático de tipo variant, en este caso al declararlas sin ponerle un tipo, se declaran como tipo variant.

5. Para que el combobox muestra la lista de datos, se tiene que salir del combo y regresar al combo, por eso activo la celda D6, puede se cualquiera.

¡Gracias por las explicaciones! Nunca te acostaras sin saber una cosa más

Ya he probado el código por fin!!!

Dante amor, cargar carga bien pero al seleccionar una opción del desplegable excel se queda colgado, no tengo ni idea del porqué.

Otra cuestión sería que en el desplegable se  mostraran varias columnas acorde con el filtrado. Necesito ver aparte del nombre buscado, la sexta columna (contando que la buscada es la primera) y la novena.

ya he puesto "columncount" 9 y le he dado el ancho de columna a cada una en "Columnwidths" (he puesto 0 pt a las columnas que no quiero mostrar y estan entre medias) sólo me falta saber la manera de cargar las columnas.

Muchas gracias de antemano!!!

El código me funciona bien, puedo seleccionar cualquier dato y no se cuelga.

Tal vez modificaste algo en la macro.

Con mucho gusto te ayudo con todas tus peticiones. Crea una nueva pregunta en el tema de microsoft excel, en el desarrollo de la pregunta escribe: "para Dante Amor"

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas