AW: Zwei Do..Loop Schleifen in 1 Prozedur
10.09.2021 18:54:56
Daniel
HI
ok, ich vermute ich hab das Problem verstanden.
Du hast eigentlich eine einzige DO-Loop-Schleife, aber du willst unterschiedliche Abbruch-Bedingungen verwenden, je nach dem ob
Gesprächsauswertung_Monat_Kalender oder ob Gesprächsauswertung_CB gewählt wurde.
wenn jetzt die Werte "(BereichEnde - BereichAnfang) + 1" und " cboDatumIndex + 1" über den Schleifenverlauf nicht verändert werden,
könnte man einfach programmieren:
Public Function Markieren_und_auswerten_CB_Monat_Kalender()
Dim Ende As long
If Gesprächsauswertung_Monat_Kalender = 1 Then Ende = BereichEnde - BereichAnfang) + 1
If Gesprächsauswertung_CB = 1 Then Ende = cboDatumIndex + 1
If Ende = 0 then Exit Sub 'nicht ausgewählt
Do Until Umlauf = Ende
Umlauf = Umlauf + 1
wobei man dann hier auch anstelle von Do_Loop auch ein For-Next einsetzen könnte, was folgende Vorteile hat:
- keine Endlosschleifen möglich
- etwas schneller als Do-Loop
- Schleifenzähler wird automatisch mit hochgezählt
also
for Umlauf = Umlauf to Ende
Next
etwas anders sieht es aus, wenn sich die Abbruchbedingungen über den Schleifenverlauf ändern können.
Dann braucht man zwingend das Do-Loop und die Grenzwerte für den Abbruch müssen auch immer aktuell berechnet werden und können nicht vorab bestimmt werden.
Dann muss man das so machen, wenn man unterschiedliche Abbruchbedingungen hat:
man startet die Schleife erstmal mit DO ohne irgendwas und programmiert die Abbruchbedingung mit EXIT DO innerhalb der schleife
Da hat man dann noch mehr Möglcihkeiten, das flexibel zu gestalten und kann dann auch mehrere Progammzeilen dafür verwenden:
Public Function Markieren_und_auswerten_CB_Monat_Kalender()
DO
If Gesprächsauswertung_Monat_Kalender = 1 Then
IF (BereichEnde - BereichAnfang) + 1 = Umlauf Then Exit Do
ElseIf Gesprächsauswertung_CB = 1 Then
IF cboDatumIndex + 1 = Umlauf Then Exit Do
Else
Exit Do '--- ´Sofortabbruch, wenn keine der beiden Optionen gewählt wurde
end If
Umlauf = Umlauf + 1
.... hier dann der weitere Code
Loop
Gruß Daniel