Hallo Demian (heisst Du wirklich so?),
Andreas aka "Glombi" hat es schon geschrieben: Mit einem simplen "Exit Sub" in einer Fehlerroutine löst Du den Fehler nicht auf - Du schickst ihn "ungebremst" an die aufrufende Instanz (hier: Der Notes-Client).
Ein simples "Resume" vor dem Exit Sub oder die Abfrage von Err (mit einer Ausgabe der Meldung zum Beispiel - aber das wäre hier ungeschickt) würde Err wieder auf 0 setzen.
Insgesamt ist Dein Code aber ungeschickt. Warum überprüftst Du die instantiierten Items nicht auf Verfügbarkeit?
Set feld = doc.GetFirstItem("Title")
If not (feld Is Nothing) Then ...
Aber es geht noch einfacher:
Statt
Set feld = doc.GetFirstItem("Firstname")
ex.ActiveCell.Offset(0, 1).Value = feld.Text
szReadString = doc.FirstName (0)
ex.ActiveCell.Offset(0, 1).Value = szReadString
Wenn das Item jetzt nicht existiert, bekommst Du einen Leerstring zurück - die Excelsheet-Zelle bleibt leer.
Was mir allerdings unklar ist: Warum erwartest Du Zertifikate in der Ansicht "People"? Die kommen dort doch gar nicht vor.
By the way: Dein Script scheiterte bei mir ausgerechnet beim Adressbucheintrag von Andreas Glombitza, weil es dort das Item "StreetAddress" nicht gibt (irgendwie mal importiert) ;D
Noch ein Hinweis: Deine Fehlerbehandlungsroutine wegen nicht laufenden Excel ist "etwas" blauäugig: Was machst Du, wenn ein Anwender Excel gar nicht oder falsch installiert hat? Dann heisst es: "In Ewigkeit - Amen!" sprach die Endlosschleife ...
HTH.
Bernhard