Textbox actualizando un listbox

Hola! Buen día
Tengo un listbox en el cual se cargan nombres de proveedores, lo que necesito es un textbox en el que cuando yo vaya escribiendo la palabra, se vaya seleccionando en el listbox el valor más cercano Por ejemplo:
Textbox: ABASTECEDORA ÁRBOL
Listbox: ABASTECEDORA BUENDIA
            Abastecedora cardio
            Abastecimientos ac
En caso de encontrarse, seleccionar del listbox y en caso de no, seleccionar un commandbutton para agregarlo.
Espero me haya dado a entender.
Saludos
2

2 respuestas

Respuesta
1
Bien. Después de un rato de codificación, tengo el siguiente ejemplo:
.
Combo Box Insertable
.
Para lo que deseas, es más recomendable el Combo Box, pues ya incluye la primera parte de tu requerimiento.
.
Respuesta
1
Te he preparado este código que, creo, es más o menos lo que buscas.
Parto de la idea de que los proveedores están en la columna "A" de la "Hoja1", eso lo tendrás que ajustar a la realidad, así como los nombres de los objetos.
Option Explicit
Private Sub TextBox1_Change()
    actualizarListaYBoton
End Sub
Private Sub actualizarListaYBoton()
    Dim snListaVacia As Boolean
    snListaVacia = snVacioActualizarLista(Me.TextBox1)
    ' Si no está el valor en la lista activamos el botón
    Me.CommandButton1.Enabled = snListaVacia
End Sub
Private Function snVacioActualizarLista(ByVal txtBuscar As String)
    ' Nos devuelve un valor indicando si está vacía la lista después de
' actualizar el contenido
    Dim nLin As Integer
    Dim sh As Worksheet
    Dim snIncluir As Boolean
    snVacioActualizarLista = True ' Hasta que se demuestre lo contrario
    ' Cargaremos los datos del listbox de la columna A de la hoja1
    Me.ListBox1.Clear
    nLin = 1
    Set sh = Sheets("hoja1")
    Do While sh.Cells(nLin, 1) <> "" ' Mientras haya algún valor en la celda
        If sh.Cells(nLin, 1) <> "" Then
            If txtBuscar = "" Then ' si no buscamos nada... se añade
                snIncluir = True
              Else
                ' Ahora vienen 4 posibilidades que son las combinaciones de 2 y 2:
                ' - Queremos diferenciar mayúsculas y minúsculas...
                ' - Queremos que el valor de la lista comience por el texto
                ' A buscar o bien nos vale con que esté contenido en él.
                ' Por ejemplo: con "JO" seleccionaría a "Jose" y a "Juanjo"
                ' Si lo pongo como contenido en el texto (comparación >0) o
                ' Elegiría sólo a "Jose" si quiero que empiece por (comparación =1)
                ' Las 4 posibilidades serían:
                ' 1) No diferencia May/Min y empieza por el texto buscado
                ' snIncluir = (InStr(UCase$(sh.Cells(nLin, 1)), UCase$(txtBuscar)) = 1)
                ' 2) Sí diferencia May/Min y empieza por el texto buscado
                ' snIncluir = (InStr(sh.Cells(nLin, 1), txtBuscar) = 1)
                ' 3) No diferencia May/Min y contiene el texto buscado
                ' snIncluir = (InStr(UCase$(sh.Cells(nLin, 1)), UCase$(txtBuscar)) >0)
                ' 4) Sí diferencia May/Min y contiene el texto buscado
                ' snIncluir = (InStr(sh.Cells(nLin, 1), txtBuscar) > 0)
                ' Pondremos la primera por elegir alguna opción
                snIncluir = (InStr(UCase$(sh.Cells(nLin, 1)), UCase$(txtBuscar)) = 1)
            End If
            ' Si tenemos que incluirlo... lo hacemos
            If snIncluir Then
                Me.ListBox1.AddItem sh.Cells(nLin, 1)
                snVacioActualizarLista = False ' Ya no está vacía la lista
            End If
        End If
        nLin = nLin + 1
    Loop
End Function
Private Sub Worksheet_Activate()
    actualizarListaYBoton
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas