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

Forumthread: erste Tests mit einfachem Klassenmodul

erste Tests mit einfachem Klassenmodul
02.06.2017 22:31:57
Florian
Hallöchen
Ich mache derweil meine ersten Gehversuche mit Klassenmodulen.
Hierzu habe ich folgende Klasse erstellt:

'Klassenmodul cls1
Option Explicit
Public Angriffe As String
Public Duchschnitt As Long
Public ID As Long
Public Orden As String
Public Name As String
Public lvl As Long
Nun möchte ich mithilfe dieser Klasse Daten aus einem Tabellenblatt in eine Collection schmeißen und mittels Debug.Print wieder ausgeben.
Das Modul hierfür sieht folgendermaßen aus:
'normales Modul
Option Explicit
Sub Makro1()
Dim oDaten As New cls1
Dim coll As New Collection
Dim i As Long
Dim letztezeile As Long
With ThisWorkbook.Worksheets("Farm")
letztezeile = .Cells(Rows.Count, 5).End(xlUp).Row
For i = 2 To letztezeile
oDaten.Angriffe = .Cells(i, 1)
oDaten.Duchschnitt = .Cells(i, 2)
oDaten.ID = .Cells(i, 3)
oDaten.Orden = .Cells(i, 4)
oDaten.Name = .Cells(i, 5)
oDaten.lvl = .Cells(i, 6)
coll.Add oDaten
Next
End With
For Each oDaten In coll
Debug.Print oDaten.Angriffe & " " & oDaten.Duchschnitt & " " & oDaten.Name
Next
End Sub
Jedoch druckt mir die For Each Schleife mehrmals den selben Listeneintrag aus.
Dies habe ich im Lokalfenster beobachtet.
Beim ersten Durchlauf der For Schleife wird korrekt in die Collection geschrieben.
Beim zweiten Durchlauf wird dann der zweite Eintrag vorgenommen.
Hierbei wird jedoch der erste Eintrag überschrieben.
Jedes mal, wenn das Objekt oDaten mit Daten zugewiesen wird, werden die Einträge in der Collection überschrieben.
Warum ist das so? Ich finde den Fehler nicht.
Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: erste Tests mit einfachem Klassenmodul
02.06.2017 22:59:14
Nepumuk
Hallo,
so:
Option Explicit

Sub Makro1()
    
    Dim oDaten As cls1
    Dim coll As New Collection
    Dim i As Long
    Dim letztezeile As Long
    
    With ThisWorkbook.Worksheets("Farm")
        letztezeile = .Cells(Rows.Count, 5).End(xlUp).Row
        
        For i = 2 To letztezeile
            Set oDaten = New cls1
            oDaten.Angriffe = .Cells(i, 1)
            oDaten.Duchschnitt = .Cells(i, 2)
            oDaten.ID = .Cells(i, 3)
            oDaten.Orden = .Cells(i, 4)
            oDaten.Name = .Cells(i, 5)
            oDaten.lvl = .Cells(i, 6)
            coll.Add oDaten
            Set oDaten = Nothing
        Next
    End With
    
    For Each oDaten In coll
        Debug.Print oDaten.Angriffe & " " & oDaten.Duchschnitt & " " & oDaten.Name
    Next
    
End Sub

Gruß
Nepumuk
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

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