Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Fehlermeldung VBA

Fehlermeldung VBA
12.07.2017 13:11:25
lau
Hallo zusammen,
bekomme an dieser Stelle des Makros eine Fehlermeldung (Laufzeitfehler 457) Dieser Schlüssel ist bereits einem Element dieser Auflistung zugeordnet.
Das Makro verwende ich für mehrere Bereiche in einem Exceldatenblatt:
'Kopiere Werte aus der Pivot-Tabelle in Reporting-File
' Definiere MonatsIndex
Dim Monat As String
Dim MonatsIndex As Collection
Set MonatsIndex = New Collection
i = 1
While ReportingWB.Worksheets("Monatliche Sicht").range("DeltaMonthlySigma1").Offset(i, 0).Value "Gesamt"
Monat1 = ReportingWB.Worksheets("Monatliche Sicht").range("DeltaMonthlySigma1").Offset(i, 0).Value
FEHLERMELDUNG HIER: MonatsIndex.Add i, Monat
i = i + 1
Wend
...
vielen Dank für Hilfe.
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fehlermeldung VBA
12.07.2017 13:23:47
Werner
Hallo,
muss das i nicht in eine Klammer?
Gruß Werner
AW: Fehlermeldung VBA
12.07.2017 13:33:19
lau
Hallo Werner,
Leider nicht.
Das Makro verwende ich für unterschiedliche Bereiche in einem Excel - Datenblatt.
Das erste Mal läuft es fehlerfrei durch. Das 2te Mal hängt es sich auf bei dem Monatsindex..
Viele Grüße
Dani
Anzeige
AW: Fehlermeldung VBA
12.07.2017 14:43:03
yummi
HAllo Dani,
beim ersten Durchlauf weist du der collection Speicher zu und beim 2. Durchlauf willst Du den selben Speicher benutzen, das ist der Fehler. Entweder Du musst den Speicher vorher wieder frei geben oder aber mit add welchen dazu holen, wenn Du die alten Werte noch brauchst.
Gruß
yummi
Anzeige
AW: Fehlermeldung VBA
12.07.2017 15:17:33
lau
Hallo yummi,
vielen Dank für die Antwort, aber mit welchem Befehl kann ich den Speicher wieder freigeben, damit ich collection öfters verwenden kann? Oder wie mit Add arbeiten? Die alten Werte brauche ich nicht mehr, sondern es kommen neue hinzu in andere Spalten dann.
Viele Grüße
Dani
Anzeige
AW: Fehlermeldung VBA
12.07.2017 16:57:02
yummi
Hallo Dani,
löschen mit Set Collectionvariable = Nothing
Gruß
yummi
;
Anzeige

Infobox / Tutorial

Fehlermeldungen in VBA effektiv beheben


Schritt-für-Schritt-Anleitung

Um die Fehlermeldung "Laufzeitfehler 457: Dieser Schlüssel ist bereits einem Element dieser Auflistung zugeordnet" in deinem VBA-Makro zu beheben, befolge diese Schritte:

  1. Verstanden, was der Fehler bedeutet: Der Fehler tritt auf, wenn du versuchst, einen Schlüssel in einer Collection hinzuzufügen, der bereits existiert. In deinem Beispiel ist Monat der Schlüssel.

  2. Überprüfen, ob der Schlüssel bereits vorhanden ist: Bevor du MonatsIndex.Add i, Monat ausführst, kannst du überprüfen, ob der Schlüssel schon in der Collection ist.

    If Not CollectionExists(MonatsIndex, Monat) Then
       MonatsIndex.Add i, Monat
    End If
  3. Funktion zum Überprüfen des Schlüssels definieren:

    Function CollectionExists(col As Collection, key As String) As Boolean
       On Error Resume Next
       CollectionExists = Not IsEmpty(col(key))
       On Error GoTo 0
    End Function
  4. Speicher der Collection freigeben: Wenn du die Collection nicht mehr benötigst, kannst du sie mit Set MonatsIndex = Nothing leeren, bevor du das Makro erneut ausführst.


Häufige Fehler und Lösungen

  • Fehler: "Dieser Schlüssel ist bereits einem Element dieser Auflistung zugeordnet."

    • Lösung: Überprüfe, ob der Schlüssel bereits existiert, bevor du ihn hinzufügst.
  • Fehler: Unzureichende Speicherfreigabe

    • Lösung: Verwende Set MonatsIndex = Nothing, um die Collection vor einem neuen Durchlauf zu leeren.

Alternative Methoden

Falls du die Collection nicht immer leeren möchtest, kannst du auch eine neue Collection für jeden Durchlauf erstellen:

Dim MonatsIndex As New Collection

Auf diese Weise wird jedes Mal eine frische Sammlung erstellt, wodurch der Fehler vermieden wird.


Praktische Beispiele

Hier ist ein praktisches Beispiel, wie du den Code anpassen kannst:

Dim MonatsIndex As Collection
Set MonatsIndex = New Collection

Dim i As Integer
i = 1

While ReportingWB.Worksheets("Monatliche Sicht").Range("DeltaMonthlySigma1").Offset(i, 0).Value <> "Gesamt"
    Dim Monat As String
    Monat = ReportingWB.Worksheets("Monatliche Sicht").Range("DeltaMonthlySigma1").Offset(i, 0).Value

    If Not CollectionExists(MonatsIndex, Monat) Then
        MonatsIndex.Add i, Monat
    End If

    i = i + 1
Wend

Set MonatsIndex = Nothing  ' Speicher freigeben

Tipps für Profis

  • Nutze On Error Resume Next mit Bedacht: Diese Anweisung kann helfen, Fehler zu ignorieren, aber sie kann auch dazu führen, dass echte Probleme übersehen werden.

  • Verwende Debugging-Tools: Setze Haltepunkte und verwende die Debugger-Funktion in VBA, um den Fehler genauer zu lokalisieren.

  • Schreibe Dokumentationen: Halte fest, was in deinem Code passiert, um zukünftige Fehlermeldungen schneller zu identifizieren.


FAQ: Häufige Fragen

1. Frage: Wie gebe ich den Speicher einer Collection in VBA frei?
Antwort: Du kannst den Speicher einer Collection freigeben, indem du Set CollectionVariable = Nothing verwendest.

2. Frage: Was mache ich, wenn ich den Fehler nicht finde?
Antwort: Nutze Debugging-Tools und versuche, Teile des Codes schrittweise auszukommentieren, um den Fehler zu isolieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige