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

Löschen einer Collection in VBA

Forumthread: Löschen einer Collection in VBA

Löschen einer Collection in VBA
05.09.2003 10:45:07
Stefan
Hi!

ich habe folgendes Problem. In einer Schleife verwende ich eine Collection. Diese soll für jeden Durchlauf mit bestimmten Werten gefüllt werden, was auch gut klappt. Blöderweise gelingt es mir aber nicht, die Collection zu beginn jedes Schleifendurchlaufes zu löschen, d.h. auch alte Einträge bleiben erhalten. Gibt es eine einfache Möglichkeit, die gesamte Collection auf einmal zu löschen bzw. zu entleeren, bevor der nächste Durchlauf beginnt?

Gefüllt wird die collection mittels folgenden Codes:

Set SIBereich = Range("E1:E" & intLetzteZeile)

On Error Resume Next
For Each ZelleinSI In SIBereich
collSI.Add ZelleinSI.Value, CStr(ZelleinSI.Value)
Next ZelleinSI

On Error GoTo 0

wobei sich die Range bei jedem Schleifendurchlauf ändert. Ich hätte gerne sowas wie collSI.Delete!

Vielen Dank
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Remove-Methode für jedes Element o.T.
05.09.2003 10:58:21
Michael Scheffler
AW: Löschen einer Collection in VBA
05.09.2003 11:13:04
Thomas Risi
Hallo Stefan

Versuch's mal etwa so ...


Option Explicit

Sub Test()
    
    Dim As Collection
    Dim As Long
    
    Set c = New Collection
    
    c.Add "Heute "
    c.Add "ist "
    c.Add "Freitag."
    
    For i = 1 To 3
        MsgBox c(i)
    Next i
    
    Set c = Nothing
    
    Set c = New Collection
    
    c.Add "Gestern "
    c.Add "war "
    c.Add "Donnerstag."
    
    For i = 1 To 3
        MsgBox c(i)
    Next i
    
    Set c = Nothing
    
End Sub



Gruß
Thomas

Risi Thomas Softwareentwicklung


Anzeige
;

Forumthreads zu verwandten Themen

Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

Löschen einer Collection in VBA


Schritt-für-Schritt-Anleitung

Um eine Collection in VBA zu löschen, kannst du die Clear-Methode nicht direkt verwenden, da es sie nicht gibt. Stattdessen kannst du die Collection einfach auf Nothing setzen und dann eine neue Collection erstellen. Hier ist, wie du das machen kannst:

  1. Deklariere deine Collection:

    Dim collSI As Collection
  2. Setze die Collection zu Beginn deines Codes auf Nothing:

    Set collSI = Nothing
  3. Erstelle eine neue Collection, bevor du sie mit Werten füllst:

    Set collSI = New Collection
  4. Fülle die Collection wie gewohnt.

Hier ist ein Beispiel, wie dein Code aussehen könnte:

Dim collSI As Collection
Dim SIBereich As Range
Dim ZelleinSI As Range
Dim intLetzteZeile As Long

intLetzteZeile = 10 ' Beispielwert

Set collSI = New Collection
Set SIBereich = Range("E1:E" & intLetzteZeile)

' Beispiel Schleife
For i = 1 To 5 ' Beispiel Schleife
    Set collSI = Nothing
    Set collSI = New Collection

    On Error Resume Next
    For Each ZelleinSI In SIBereich
        collSI.Add ZelleinSI.Value, CStr(ZelleinSI.Value)
    Next ZelleinSI
    On Error GoTo 0
Next i

Häufige Fehler und Lösungen

Fehler: Du erhältst eine Fehlermeldung beim Hinzufügen eines Wertes zur Collection.

Lösung: Stelle sicher, dass du On Error Resume Next verwendest, um zu verhindern, dass der Code bei doppelten Schlüsseln stoppt. Das hilft dir, die alten Werte zu ignorieren.

Fehler: Die Collection wird nicht geleert.

Lösung: Vergiss nicht, die Collection auf Nothing zu setzen, bevor du eine neue instanzierst. Dies stellt sicher, dass die vorherige Collection gelöscht wird.


Alternative Methoden

Eine alternative Methode, um eine Collection zu löschen, besteht darin, die For Each-Schleife zu verwenden, um alle Elemente zu entfernen. Dies ist jedoch nicht so effizient wie die oben beschriebene Methode.

For i = collSI.Count To 1 Step -1
    collSI.Remove i
Next i

Diese Methode kann nützlich sein, wenn du die Collection nicht neu instanziieren möchtest, sondern nur die Inhalte leeren möchtest.


Praktische Beispiele

Hier ist ein praktisches Beispiel für das Löschen und Neuanlegen einer Collection in einem Access VBA Formular:

Dim collFormElements As Collection
Set collFormElements = New Collection

' Füge Elemente hinzu
collFormElements.Add "TextBox1"
collFormElements.Add "ComboBox1"

' Lösche die Collection
Set collFormElements = Nothing
Set collFormElements = New Collection

In diesem Beispiel wird die Collection collFormElements für die Verwendung in einem Access-VBA-Formular erstellt und anschließend geleert, bevor sie erneut verwendet wird.


Tipps für Profis

  • Nutze die vba clear collection-Technik, um die Leistung deines Codes zu optimieren, indem du nicht benötigte Collections vermeidest.
  • Verwende Option Explicit, um sicherzustellen, dass alle Variablen deklariert werden, was zu weniger Fehlern führt.
  • Überlege dir, ob du die VBA.Collection-Objekte in Arrays umwandeln kannst, wenn du nur einfache Daten speicherst; dies kann die Leistung verbessern.

FAQ: Häufige Fragen

1. Wie kann ich die Anzahl der Elemente in einer Collection überprüfen? Um die Anzahl der Elemente in einer Collection zu überprüfen, verwende die Count-Eigenschaft:

Dim anzahl As Long
anzahl = collSI.Count

2. Kann ich eine Collection in einer Funktion zurückgeben? Ja, du kannst eine Collection aus einer Funktion zurückgeben. Stelle sicher, dass die Funktion den Rückgabetyp Collection hat:

Function MeineCollection() As Collection
    Dim coll As New Collection
    coll.Add "Element1"
    Set MeineCollection = coll
End Function

Diese Anleitungen helfen dir, Collections in VBA effizient zu verwalten und zu löschen.

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