Ein Pakettransporter verlor gestern eine große Ladung Synonymwörterbücher. Die Augenzeugen waren fassungslos, bestürzt, erschüttert, schockiert, betroffen, aufgewühlt, konsterniert, perplex, entsetzt, erschrocken und entgeistert.

Einfach nicht aufgepasst. Dabei weiß ich es doch:

Ich erstelle eine Userform in Excel VBA. Darin sollen Werte „nach unten“ weitergegeben werden, wenn ein Kontrollkästchen angeklickt wird. Die Kästchen heißen chkFamilie02, chkFamilie03, chkFamilie04, … chkFamilie12

Ich prüfe, ob das letzte ausgewählt wurde oder ob noch weitere unten ausgewählt wurden:

Do Until frmAuswahl.Controls("chkFamilie" & Format(intZeile, "00")).Visible = False Or frmAuswahl.Controls("chkFamilie" & Format(intZeile, "00")).Value = False Or intZeile > 12

Das läuft an die Wand – eine Fehlermeldung ist die Folge. Mein Denkfehler:

wenn intZeile > 12, dann wird das geürft. Beispielsweise: intZeile hat den Wert 13. Allerdings: es wird auch geprüft, ob das Control chkFamilie12 sichtbar ist. Und das gibt es nicht!

OR (und auch AND) in VBA prüft (leider!) immer alle Teile. Und stoppt nicht, wenn einer der beiden Zweige falsch ist. Also anders gelöst – nicht ganz elegant – aber okay:

Do Until frmAuswahl.Controls("chkFamilie" & Format(intZeile, "00")).Visible = False frmAuswahl.Controls("chkFamilie" & Format(intZeile, "00")).Value = False 
       strZeile = Format(intZeile, "00")
       frmAuswahl.Controls("lblInfoZeile" & strZeile).Caption = strText
       intZeile = intZeile + 1
       If intZeile > 12 Then Exit Do
Loop

Geht doch!