En este proyecto simulamos un ListBox que es un campo que a medida que se escribe despliega una lista con las coincidencias encontradas.
En el proyecto se uso un TextBox que es donde el usuario escribe las palabras claves y se uso un List para mostrar la lista de coincidencias, este proyecto hace una consulta a una base de datos que contiene un tabla Alumnos.

Al escribir sobre el campo de la izquierda se despliega en List con las coincidencias.

Al presionar en el teclado la tecla flecha Abajo automáticamente se pasa a la lista para poder moverse en el listado de coincidencias. Los procedimientos usados fueron:
La Conexión:
Dim ConexionADO As New ADODB.Connection
Dim Record As New ADODB.Recordset
Sub Conectar()
ConexionADO.CursorLocation = adUseClient
ConexionADO.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & App.Path & "/BaseDatos.accdb" _
& ";Jet OLEDB:Database Password="
End Sub
Procedimiento que carga el List.
Sub MostarLista()
'Se filtra usando like para que busque todas las coincidencias que tengas los caracteres escritos en el campo txtFiltrar
sql = "Select * From Alumnos Where nombre_apellidos_al Like '%" & txtFiltrar.Text & "%' order by nombre_apellidos_al ASC "
Set Record = ConexionADO.Execute(sql)
If Len(txtFiltrar.Text) > 2 Then 'solo se muestra la lista si hay mas de 2 carácteres
listAlumnos.Clear 'Se limpia el List
If Record.RecordCount > 0 Then 'Si se encontraron registros
Indice = 0
Do While Not Record.EOF
listAlumnos.AddItem Record("nombre_apellidos_al") 'se agrega el nombre del alumno a la lista
listAlumnos.ItemData(Indice) = Record("codigo_al") ' se guarda el Codigo del alumno
Record.MoveNext
Indice = Indice + 1
Loop
listAlumnos.Top = 600 'Posición superior del control
listAlumnos.Left = 360 'Posición derecha
listAlumnos.Visible = True
Else
listAlumnos.Visible = False 'si no hay registros se oculta la lista
End If
Else
listAlumnos.Visible = False 'si no son mas de 2 caracteres se oculta la lista
End If
End Sub
Procedimiento que llena los campos dependiendo del Alumno seleccionado en la lista:
Sub FiltrarAlumnosLista()
If listAlumnos.ListIndex >= 0 Then 'si selecciono un elemento de la lista
CodAlumn = listAlumnos.ItemData(listAlumnos.ListIndex) 'se optiene el codigo del alumno seleccionado en la lista
Record.Filter = "codigo_al=" & Val(CodAlumn) 'se filtra el Recorset por el codigo del alumno
If Record.RecordCount > 0 Then 'si se encontraron registros se llenan los campos
txtFiltrar.Text = listAlumnos.Text
txtCodigo.Text = Record("codigo_al")
txtNombre.Text = Record("nombre_apellidos_al")
txtTelefono.Text = Record("telefono")
txtDireccion.Text = Record("direccion")
Else
Call LimpiarCampos
End If
Else
Call LimpiarCampos
End If
End Sub
Eventos del Control List:
Private Sub listAlumnos_Click()
Call FiltrarAlumnosLista
End Sub
Private Sub listAlumnos_KeyUp(KeyCode As Integer, Shift As Integer)
If KeyCode = 40 Or KeyCode = 38 Then 'Si se preciona flecha abajo o flecha Arriba
Call FiltrarAlumnosLista
End If
If KeyCode = 13 Then 'Si se preciona Enter
listAlumnos.Visible = False
txtCodigo.SetFocus
End If
If KeyCode = 27 Then 'Si Se preciona ESC
txtFiltrar.SetFocus
listAlumnos.Visible = False
End If
End Sub
Eventos del control Filtrar:
Private Sub txtFiltrar_GotFocus()
txtFiltrar.SelStart = 0
txtFiltrar.SelLength = Len(txtFiltrar.Text)
End Sub
Private Sub txtFiltrar_KeyUp(KeyCode As Integer, Shift As Integer)
Call MostarLista
If KeyCode = 40 Then
If listAlumnos.Visible = True Then
listAlumnos.SetFocus
End If
End If
End Sub
Este es el código del Proyecto: Descargar

