Hallo Lars,
so richtig schlau werde ich aus deinem Posting nicht 
Aber was mir auffaellt 
Du kannst dem Listview keinen Index zuweisen, da die Eigenschaft schreibgeschuetzt ist! Wenn du das versuchst, so tritt ein Laufzeitfehler auf. Den kann man zwar mit On Error Resume next weglutschen, aber ist ja nicht das wahre 
Du kannst beim Hinzufügen der Einträge einen Sogenannten Schluessel vergeben, anhand dessen du den Eintrag identifizieren kannst 
Aber wozu eigentlich? Nunja ich poste dir im Anhang mal ein Beispiel wo du es siehst 
Zu deinem Problem nun. Wenn du jeden Eintrag nur einmal durchlaufen möchtest, so hast du ja bereits die Lösung präsentiert 
Wie das Geht das siehst du auch in dem Beispiel 
Wenn ich nun total daneben liege, so gebe nochmal bescheid, was du genau machen möchtest und wo dein problem dabei liegt 
Zu dem Beispiel:
Nimm eine Form und platziere folgende Steuerelmente darauf
Ein Listview -> Name Listview1
4 Schaltflächen
Command1 -> Caption = Neu füllen
command2 -> Caption = Entfernen
command3 -> Caption = Beenden
command4 -> Caption = Alle Einträge durchlaufen und Key anzeigen
Dann kopiere dir mal folgenden Code in die Form und starte sie und probiere mal ein wenig aus. Dann siehst du wie das Steuerelement fungiert. Bei Klick auf Command 4 werden alle Eintraege im Listview durchlaufen und du bekommst den jeweiligen Key , sowie die Daten dazu in einer MSGBOX angezeigt
Ein Klick auf Command 2 Entfernt die Selektierten Eintrag in der Liste. Command 3 hingegen beendet die Form und über Command 1 kannst du schnell x beliebige Eintraege generieren 
Option Explicit
Private Sub Command1\_Click() 'Neu füllen
On Error Resume Next 'Wenn bei Inputbox ein Zeichen eingegeben wird so tritt Fehler auf, ergo weglutschen
Dim lngAnzahl As Long
lngAnzahl = CLng(InputBox("Wieviele Einträge möchten Sie erzeugen?", "Anzahl der Einträge", 30))
If lngAnzahl \> 0 Then
Call FülleListView(lngAnzahl)
Else
MsgBox "Sie müssen schon angeben, wieviele Einträge Sie generieren wollen!", vbCritical
End If
End Sub
Private Sub Command2\_Click() 'Selectierten Eintrag entfernen
ListView1.ListItems.Remove (ListView1.SelectedItem.Index)
End Sub
Private Sub Command3\_Click() 'Beenden
Unload Me
End
End Sub
Private Sub FülleListView(Anzahl As Long) 'Listview wird gefuellt
Dim i As Byte
Dim j As Long
With ListView1
'ListView füllen mit Eintraegen
For j = 1 To Anzahl
.ListItems.Add j, "Eintrag" & CStr(j), "Eintrag " & CStr(j) & " in Spalte 1"
'4 Subitems eintragen
For i = 1 To 4
.ListItems(j).SubItems(i) = "Eintrag " & CStr(j) & " in Spalte " & CStr(i + 1)
Next i
'Ein 5 Subitem eintragen, das dir den Schluessel anzeigt
.ListItems(j).SubItems(5) = "Eintrag" & CStr(j)
Next j
End With
End Sub
Private Sub Command4\_Click() 'Anzeigen aller Einträge
Dim i As Long
For i = 1 To ListView1.ListItems.Count
MsgBox "Schlüssel: " & ListView1.ListItems(i).Key & vbNewLine \_
& "Spalte1: " & ListView1.ListItems(i) & vbNewLine \_
& "Spalte2: " & ListView1.ListItems(i).SubItems(1) & vbNewLine \_
& "Spalte3: " & ListView1.ListItems(i).SubItems(2) & vbNewLine \_
& "Spalte4: " & ListView1.ListItems(i).SubItems(3) & vbNewLine \_
& "Spalte5: " & ListView1.ListItems(i).SubItems(4) & vbNewLine \_
& "Spalte6: " & ListView1.ListItems(i).SubItems(5) & vbNewLine
Next i
End Sub
Private Sub Form\_Load()
With ListView1
'Eigenschaften des Listview setzen
.View = lvwReport
.HideSelection = False
.HideColumnHeaders = False
'Spalten erstellen
.ColumnHeaders.Add , , "Spalte 1"
.ColumnHeaders.Add , , "Spalte 2"
.ColumnHeaders.Add , , "Spalte 3"
.ColumnHeaders.Add , , "Spalte 4"
.ColumnHeaders.Add , , "Spalte 5"
.ColumnHeaders.Add , , "Index"
End With
End Sub
ich hoffe dir ein wenig Licht ins Dunkel gebracht zu haben 
MfG Alex