Autocompletar textbox mientras se escribe se muestran resultados en el listbox desde base datos ADO con Macros VBA excel

Comunidad de Todoexpertos.com

Espero que por favor me puedan ayudar con una interrogante que detallo a continuación que lo he tratado de hacer pero funciona nose que se debe. Desde ya muchas gracias.

1. Yo tengo un archivo base externo excel (base.xlsx) donde almacenaría toda la información de lo que procese en el archivo origen (factura.xlsm).

2. En el archivo origen tengo un formulario con un textbox y un listbox; en el listbox cargo todos los nombres de los cliente que están en el archivo base usando ADO de esta manera sin ningún problema:

Private Sub UserForm_Initialize()
bd = ThisWorkbook.Path & "\base.xlsx"

Set conexion = New ADODB.Connection
Set datos = New ADODB.Recordset

conexion.Open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & bd & "; Extended Properties=""Excel 12.0; HDR=YES"";"

sql = "SELECT * FROM [clientes$] order by [nombres]"
datos.Open sql, conexion

With Me.LSTCLIENTES
.Clear
.ColumnCount = datos.Fields.Count
.ColumnWidths = "390;70;225;50;50;50;65;50;50;50;50;50;50;50;50;50;50;50;"
.Column = datos.GetRows
End With
End Sub

3. El problema se da cuando hago la búsqueda del nombre del cliente en el textbox y mientras escribo en el vaya filtrando letra por letra y me muestre las coincidencias en el mismo listbox pero no funciona.

Por favor espero que me puedan ayudarme a resolverlo y saber donde esta el problema.

Private Sub TXTBUSCACLIENTES_Change()
bd = ThisWorkbook.Path & "\base.xlsx"

Set conexion = New ADODB.Connection
Set datos = New ADODB.Recordset

conexion.Open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & bd & "; Extended Properties=""Excel 12.0; HDR=YES"";"

sql = "SELECT * FROM [clientes$]" & " where [nombres] like '*" & Me.TXTBUSCACLIENTES.Text & "*'"
datos.Open sql, conexion

Do While Not datos.EOF
Me.LSTCLIENTES.AddItem (datos.Fields.Item("nombres").Value)
datos.MoveNext
Loop

conexion.Close

Set datos = Nothing
Set conexion = Nothing
End Sub

En espera de su pronta ayuda.

1 Respuesta

Respuesta
1

Cambié los * por %

También agregué LSTCLIENTES. Clear para que se vean únicamente los filtrados:

Private Sub TXTBUSCACLIENTES_Change()
    bd = ThisWorkbook.Path & "\base.xlsx"
    Set conexion = New ADODB.Connection
    Set datos = New ADODB.Recordset
    conexion.Open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & bd & "; Extended Properties=""Excel 12.0; HDR=YES"";"
    Sql = "SELECT * FROM [clientes$]" & " where [nombres] like '%" & Me.TXTBUSCACLIENTES.Text & "%'"
    Datos. Open Sql, conexion
    LSTCLIENTES.Clear
    Do While Not datos.EOF
        Me.LSTCLIENTES.AddItem (datos.Fields.Item("nombres").Value)
        datos.MoveNext
    Loop
    conexion.Close
    Set datos = Nothing
    Set conexion = Nothing
End Sub

'

Muchísimas gracias por tu valiosa ayuda¡ Dante Amor me ha servido de mucho a avanzar en lo que estoy haciendo.

Si tengo alguna otra duda espero no haya problema si te molesto en otra ocasión.

Por cierto mi más sentido pésame por la perdida de su padre... que Dios lo tenga en su gloria.

Armando

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas