Modificando algo tu propio código... pero mejor copia todo y pégalo (antes comenta todo ese código que tienes)
Private s_IndexActual As Long
Private Sub BuscarPatron(ByRef lst As ListBox, ByRef Patron As String)
' almacenamos el índice obtenido en una variable a nivel de módulo.
' la búsqueda comenzará un índice más alla del actual...
' convertimos patrona amayúsculas antes de enviarlo a la función, así el bucle no necesita hacerlo en cada iteración.
s_IndexActual = IndexEnLista(lst, UCase$(Patron))
' Si se halló, se hace ese ítem actual, si no;
' se deselecciona (indice= -1), y en la próxima búsqueda comenzaría en: -1 + 1 = 0
lst.ListIndex = s_IndexActual
Me.Caption = "Indice: " & CStr(s_IndexActual)
End Sub
Private Function IndexEnLista(ByRef lst As ListBox, ByRef Patron As String) As Long
Dim k As Long
On Error Resume Next
' Busca desde siguiente al actual hasta el final
For k = (s_IndexActual + 1) To lst.ListCount
If InStr(UCase$(lst.List(k)), Patron) Then
IndexEnLista = k
Exit Function
End If
Next
' y si no se hallo en ese tramo, busca desde el comienzo hasta el actual.
For k = 0 To s_IndexActual
If InStr(UCase$(lst.List(k)), Patron) Then
IndexEnLista = k
Exit Function
End If
Next
' Si no se encuentra de ninguna manera, deselecciona la lista (valor -1)
IndexEnLista = -1
End Function
Private Sub Command1_Click()
Call BuscarPatron(List1, Text1.Text)
End Sub
Private Sub Form_Load()
List1.AddItem "MÉXICO" & " Pepe "
List1.AddItem "VENEZUELA" & " Jose"
List1.AddItem "ARGENTINA"
List1.AddItem "ESPAÑA"
List1.AddItem "GUATEMALA"
List1.AddItem "ARGENTINA"
List1.AddItem "CHILE"
End Sub
Private Sub Text1_Change()
Call BuscarPatron(List1, Text1.Text)
'list1.text contiene el valor del ítem actualmente seleccionado, sin necesidad de saber su índice.
Label1.Caption = List1.Text
End Sub
En realidad, la búsqueda es sobre si "Contiene...", y quizás sería preferible que la función se limitara a "SiEmpiezaCon...", Tampoco es adecuado que solo con una letra, deba buscarse en el listado, quizás debiera exigirse un mínimo de dos... pero bueno ambas cosas ya debes valorarlo tú.
Para un listivew, depende de lo que quieras hacer... no cambia básicamente nada, (aparte del objeto en sí), o cambia todo, en cualquier caso el control Listview, dispone del método "FindItem", que permite buscar un texto completo o parcial, escribe el nombre del método y pulsa "F1" (Ayuda), lee y mira los ejemplos...
...antes intenta adaptar la solución que te dí al listview, si te satisfe, listo, si no, vuelve a preguntar pero más especificamente con lo que necesitas, ya que ese control es mucho más que un simple Listbox...
p.d.: Olvidaba lo de la tecla enter...
Para probarlo ,escribe 'e' y pulsa sucesivamente la tecla enter, como excepto Méjico ( en la É tildada), tienen una 'e', recorrerá todos losítems y volverá al inicio...
Private Sub Text1_KeyPress(KeyAscii As Integer)
If (Len(Text1.Text) > 0) Then
If KeyAscii = vbKeyReturn Then
Call BuscarPatron(List1, Text1.Text)
End If
End If
End Sub