Zum Thema Performancekiller:
So lange man nur das erste Dokument mittels GetNthDocument (1) holt, stellt das keinen Unterschied zu GetFirstDocument dar. Der Performance-Unterschied kommt erst bei höheren Zahlen. Vermutlich arbeitet die Routine intern auch mit Routinen wie GetFirstDocument und GetNextDocument, vielleicht sinngemäß so (nur von der Logik, nicht von der Syntax):
Function GetNthDocument (nr As Long) As NotesDocument
Set doc = view.GetFirstDocument
For i = 1 to nr
Set doc = view.GetNextDocument (doc)
Next i
Set GetNthDocument = doc
End Sub
Dass das nicht schnell gehen kann, ist wohl eindeutig.
Ich hatte vor vielen Jahren mal einen Performancevergleich mit 3.000 Dokumenten gemacht und keinen wesentlichen Unterschied festgestellt. Seither hatte ich intensiv GetNthDocument genutzt. Bis ich mal bei über 50.000 Dokumenten in das totale Performanceloch gefallen bin, daraufhin habe ich GetNthDocument aus meinem Wortschatz gestrichen.
Zu Deiner Lösung:
Du hast eine Ansicht, in der alle zuzustellenden Dokumente sind. Du greifst Dir das erste und prüfst, ob das zugestellt wurde. Falls ja, refreshst Du die Ansicht und holst Dir wieder das erste Dokument, solange, bis Du keines mehr findest.
Wenn man sich ganz viel Mühe gibt, geht das wahrscheinlich auch noch komplizierter.
Warum holst Du Dir nicht alle Dokumente, die nicht gesendet wurden, als NotesDocumentCollection (mittels NotesDatabase.Search) und arbeitest diese Dokumente von oben nach unten ab?
Als Gerüst etwa so
....
Dim col As NotesDocumentCollection
Set col = db.Search (|Form = "DeineForm" & Agent = "NICHT ZUGETEILT"|, Nothing, 0)
Dim doc As NotesDocument
Set doc = col.GetFirstDocument
Do While Not doc Is Nothing
'doc senden, markieren, speichern
Set doc = col.GetNextDocument (doc)
Loop