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