Problembeschreibung
Bei einigen papiernen Eingabeformularen werden spezielle Eingabefelder verlangt. Diese werden dann abgefragt, wenn bestimmte Vorbedingungen erfüllt sind. Aktuelles Beispiel sind die Selbstauskünfte für Corona Tests nach §4 der Testverordnung. Dort werden z.B. Name und Geburtsdatum des Kindes nur dann abgefragt, wenn das Kind noch nicht 6 Jahre alt ist. Das in einem Access-Formular darzustellen ist nicht trivial: Das entsprechende Eingabefeld soll ja nur dann zur Eingabe zur Verfügung stehen, wenn der passende Test-Grund vorliegt.
Grundsätzliche Überlegungen
Folgende Punkte sollten meines Erachtens hier berücksichtigt werden:
- Keines der Sondereingabefelder (und dessen Beschriftung!) soll zu sehen sein, wenn das Formular geöffnet wird.
- Diese Eingabefelder (und deren Beschriftungen!) sollen dann auftauchen, wenn die entsprechende Bedingung markiert wurde.
- Für den Fall, dass man sich in der Auswahl des Bedingungsfeldes geirrt hat, sollen die Sondereingabefelder wieder ausgeblendet werden.
- Und sie sollten optisch etwas hervorgehoben werden, damit der Nutzer merkt, dass hier etwas in neue Felder eingegeben werden soll.
Letzteres ist die einfachste Übung: die Felder werden anders eingerahmt und/oder haben eine andere Hintergrundfarbe, als die Standard-Felder.
Umsetzung
Wir benötigen mindestens 2 Module: eines, welches beim Laden des Formulars aktiviert wird und alle Eingabe- und Bezeichnungsfelder unsichtbar schaltet und eines, welches die relevanten Felder sichtbar schaltet, wenn die Bedingung erfüllt wurde.
Das erste hat die grundsätzliche Form
Private Sub Form_Load()
'Alle speziellen Formularelemente werden ausgeblendet
Me!KontaktA.Visible = False
Me!Kontakt1.Visible = False
.....
End Sub
Dabei ist es wichtig, dass der Name "Form_Load" ist. Das wird automatisch eingestellt, wenn wir das Modul als Ereignisprozedur "Bei Laden" erstellen (siehe Abbildung).
Das zweite Modul erstellen wir, indem wir das Feld aktivieren, in das die Bedingung eingetragen werden soll. Dort gilt, dass nach der Aktualisierung (siehe Abbildung) die Prozedur erstellt wird. Weil wir dort mehrere Felder (zumindest ein Eingabe- und Bezeichnungsfeld) einblenden müssen, wählen wir die Select Case - End Select Schleife. Zusammen mit dem oben genannten Ausblenden sieht die Anweisung im Prinzip so aus:
Private Sub AnmGrundIDRef_AfterUpdate()
Me!KontaktA.Visible = False
Me!Kontakt1.Visible = False
....
'Die speziellen Formularelemente werden bedingt eingeblendet
Select Case Me!AnmGrundIDRef 'Name des Eingabefeldes für die Bedingung
Case "§4 Absatz 1 Nr. 1"
Me!AnmKindinfo.Visible = True
Me!BezKleinkind.Visible = True
Case "§4 Absatz 1 Nr. 6"
Me!KontaktA.Visible = True
Me!Kontakt1.Visible = True
Me!AnmKontakt1.Visible = True
...
End Select
Kommentar schreiben