Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

Hilfe Laufzeitfehler 457

Forumthread: Hilfe Laufzeitfehler 457

Hilfe Laufzeitfehler 457
21.01.2026 15:43:12
Timo
Hallo zusammen,

ich brauche eure Hilfe. Ich bin hier im Forum auf einen Link zu einem Code gestoßen mit dem ich den local path of OneDrive zu meinen Dateien auslesen kann. Das hat bei mir und meinen Kollegen die letzten Monate super funktioniert. Jetzt tritt bei mir der Laufzeitfehler 457 "Dieser Schlüssel ist bereits einem Element dieser Auflistung zugeordnet" auf. In VBA wird die letzte Zeile des unten aufgeführten Codeteils gelb markiert. Ich kann mit der Fehlermeldung noch mit dem Verweis auf die Zeile nichts anfangen. Ich verstehe den Fehler nicht und weiß nicht wieso der Fehler jetzt auf einmal auftritt. An der Datei und den Pfaden wurde nichts geändert. Bei meinen Kollegen funktioniert die Datei nach wie vor nur bei mir nicht. Hat jemand vielleicht eine Idee?

    'Clean the finished "dictionary" up, remove trailing "\" and "/"

Dim tmpColl As Collection: Set tmpColl = New Collection
For Each vItem In locToWebColl
locRoot = vItem(0): webRoot = vItem(1): syncFind = vItem(4)
If Right$(webRoot, 1) = "/" Then _
webRoot = Left$(webRoot, Len(webRoot) - 1)
If Right$(locRoot, 1) = ps Then _
locRoot = Left$(locRoot, Len(locRoot) - 1)
If Right$(syncFind, 1) = ps Then _
syncFind = Left$(syncFind, Len(syncFind) - 1)
tmpColl.Add VBA.Array(locRoot, webRoot, vItem(2), vItem(3), syncFind), locRoot


Der komplette Code ist in google unter folgenden Suchbefehl zu finden:
VBA Function to get the local path of a OneDrive

Viele Grüße
Timo
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Hilfe Laufzeitfehler 457
21.01.2026 16:45:22
GerdL
Moin,

in der TempColl ist zur Laufzeit der Schleife bereits ein Key der Collection VBA.Array(locRoot, webRoot, vItem(2), vItem(3), syncFind) vorhanden.

Ggf. kannst du vorm Add auf Existenz des Key prüfen.

Gruß Gerd
AW: Hilfe Laufzeitfehler 457
21.01.2026 22:05:18
xlKing
Hallo Timo,

du schreibst offenbar in eine Collection eine andere Collection, und dort rein dann ein Array? Hä? Siehst du da noch durch was wo steht? Du solltest dich mal mit Klassenprogrammierung beschäftigen. Dann kannst du Objekte und Eigenschaften und Methoden selbst definieren. Ist zwar etwas aufwendig aber dafür übersichtlicher. Wenn du das nicht willst hilft auch schon die Type-Anweisung etwas Ordnung reinzubringen.

Nun zu deinem Problem. nicht das Array ist der Key sondern die Variable locRoot. Was da drin steht ist entscheidend. Du kannst für die Collection eine eigene Funktion anlegen, die prüft, ob es unter dem Namen schon ein Array gibt. Einfach unter den bestehenden Code hinzufügen.

Function RootExists(Name As String) As Boolean

On Error Resume Next
If IsArray(coll(Name)) Then RootExists = True
End Function


Dann kannst du mit
If Not RootExists(locRoot) Then

tmpColl.Add VBA.Array(locRoot, webRoot, vItem(2), vItem(3), syncFind), locRoot
End If

der Collection einen neuen Eintrag geben.

PS: Ja Dictionary ist vielleicht eine Alternative. Aber eine Collection kann man von 1 bis Count in einer Schleife durchlaufen. Bin grad nicht sicher, ob das beim Dictionary auch geht.

Gruß Mr. K.

Anzeige
AW: Hilfe Laufzeitfehler 457
21.01.2026 16:50:26
Timo
Hi Gerd, ich habe versucht das Add durch Item zu überschreiben aber das wollte er nicht. Wie kann ich denn so eine Überprüfung schreiben? Ich weiß da nicht wo ich ansetzen soll, weil der Code mega groß ist. Soll ich direkt vor dem Add prüfen und das Add in eine If Abfrage setzen?
AW: Hilfe Laufzeitfehler 457
21.01.2026 21:00:57
Onur
Nimm statt Collection eine Dictionary, da ist es ganz einfach:

If dict.Exists("Apples") Then

bzw
If NOT dict.Exists("Apples") Then


Hier mal ein Überblick über Dictionaries:
https://excelmacromastery.com/vba-dictionary/
Anzeige

Forumthreads zu verwandten Themen

Anzeige