Ich verwende eine Excel-Tabelle als Datentabelle für den Zeitraumverlauf. Die Struktur ist dies:Foreach über Excel-Zellen gibt nur die erste Zeile im Lauf zurück, funktioniert aber beim schrittweisen Durchlaufen der Methode ordnungsgemäß
ID Person Start End
1 Alan 5/1 5/3
2 Bobbi 5/3 5/4
3 Chuck 5/1 5/2
5 Eugenia 5/3 5/6
6 Chuck 5/10 5/12
Start
und End
werden als Datumsfelder formatiert.
Ich schrieb eine Methode in einem VBA-Modul, um diese Tabelle abzufragen und alle Zeilen für eine bestimmte Person zurückzugeben, z. B. Chuck
. In SQL ist dies einfach genug (select fields from History where Person = something
). Ich verwende derzeit eine foreach
Schleife und den Wert von Person
testen. Meine Schleife lautet wie folgt:
Public Sub UpdatePeriod(currentPeriod as timePeriod)
Dim indexCell As Range
Dim colPeriods As New Collection
Dim priorPeriod As timePeriod
For Each indexCell in ThisWorkbook.Worksheets("History").Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row).Cells
If Not (indexCell Is Nothing) And IsNumeric(indexCell) = True Then
Set priorPeriod = GetPeriodObject(indexCell)
If (priorPeriod.Person = currentPeriod.Person) Then
colPeriods.Add priorPeriod
End If
End If
Next
'Do stuff with the entries in colPeriods....
End Sub
Ich habe die Tabelle so einstellen, dass eine bestimmte das Blatt Worksheet_Change
Ereignishandler ein timePeriod
Objekt diese Methode übergeben wird. Bis jetzt funktioniert alles richtig (obwohl es wahrscheinlich einen besseren Weg gibt).
Wenn ich die Methode ohne vor dem For Each
zu testen, wird die Schleife nur über Zeile 2 (wie Zeile 1 enthält die Header) ausgeführt. Aber wenn ich vor der Schleife breche, geht die Schleife richtig über alle Zeilen.
Wie kann ich diese Methode verbessern, um alle Zeilen von Interesse zurückzugeben?
(Anmerkung:.. Das Projekt wird mit VBA als Prototyp, und wird schließlich eine ordnungsgemäße Anwendung mit einer geeigneten Datenbank sein, die ich darauf abzielen die Datenschnittstelle zu machen genau gleich aussehen wie die Anwendung Implementierung)
OK, ich werde ein 'With' in diesen Teil fallen lassen und Ihren Code ausprobieren. –
Gewinner Gewinner Huhn Abendessen. Vielen Dank. (Alberner einzelner Zeichenfehler.) –