Textfelder kommen standardmäßig mit Bezeichnungsfeldern. Das reicht eigentlich aus, damit der Benutzer weiß, welche Informationen er in die Textfelder eintragen soll. Moderne Benutzeroberflächen kommen aber teilweise vollständig ohne diese Bezeichnungsfelder aus und zeigen einfach solange, bis der Benutzer etwas eingibt, einen Platzhalter im Textfeld an, der den einzufügenden Wert beschreibt. Das liegt möglicherweise am geringeren Platzbedarf, was gerade auf Smartphones ein Vorteil ist. Es gibt aber noch andere Gründe, warum man Textfelder mit Platzhaltertexten ausstatten sollte. Welche das sind und wie die Anzeige von Platzhaltern realisiert werden kann, zeigen wir in diesem Beitrag.
Platzhaltertexte in Access-Formularen: Mehr als nur ein Design-Trick
Platzhaltertexte in Textfeldern sind in modernen Webanwendungen längst Standard – und auch in Microsoft Access können sie eine echte Bereicherung sein.
Ob zur Platzersparnis, besseren Benutzerführung oder als Alternative zu klassischen Beschriftungen: Auf den folgenden Seiten zeigen wir die vielseitigen Einsatzmöglichkeiten und geben praktische Beispiele für den Einsatz von Platzhaltern in Access-Formularen. Wie das aussehen wird, sehen Sie in Bild 1.
Bild 1: Dies sind keine Werte, sondern Platzhalter
Hier sind unsere Top-Gründe für den Einsatz dieser Platzhalter:
- Ersatz für klassische Beschriftungsfelder: Platzhaltertexte erlauben es, auf separate Beschriftungsfelder zu verzichten. Dadurch wird das Formular kompakter und aufgeräumter. Besonders bei vielen Eingabefeldern spart das nicht nur Platz, sondern erleichtert auch die visuelle Orientierung.
- Zusätzliche Hinweise zur Dateneingabe: Platzhalter können Hinweise zur erwarteten Eingabe geben, ohne dass dafür zusätzliche Tooltips oder Hilfetexte nötig sind. Beispiele: JJJJ-MM-TT bei Datumsfeldern, Privat, Dienstlich bei einer Kategorieauswahl oder Nur Zahlen erlaubt bei numerischen Feldern.
- Verdeutlichung bei leeren Feldern: Ein leerer Wert wird durch einen Platzhalter besser verständlich. Nutzer sehen sofort, dass ein Feld leer, aber beabsichtigt leer ist – etwa bei optionalen Angaben. Beispiel: Optional: Bemerkung für Rechnung
- Unterstützung beim Onboarding: Gerade neue Benutzer profitieren von klaren Hinweisen in der Eingabemaske. Platzhalter übernehmen hier eine Art Schulungsfunktion – ohne separate Hilfe anzeigen zu müssen.
- Einheitliches Design ohne Label-Fummelei: Wer Access-Formulare im einheitlichen Stil gestalten will, wird Platzhalter schnell zu schätzen wissen. Labels mit unterschiedlicher Länge, Position oder Ausrichtung gehören der Vergangenheit an.
- Ersatz für Standardwerte: Der Platzhalter ist wie ein Platzhalter kein gespeicherter Wert. Damit lassen sich scheinbare Standardwerte anzeigen, ohne sie wirklich zu übernehmen. Hier muss man allerdings unterscheiden, ob man nicht doch einen Standardwert nutzen möchte, da ein Platzhalter im Gegensatz zu einem Standardwert beim Bearbeiten des Datensatzes nicht automatisch übernommen und später gespeichert wird.
Einfache Umsetzung per Format-Eigenschaft
Die Umsetzung ist sehr einfach. Wir müssen lediglich die Format-Eigenschaft des jeweiligen Textfeldes anpassen.
Dazu wechseln wir in die Entwurfsansicht des entsprechenden Formulars und aktivieren das Eigenschaftenblatt, sofern es nicht bereits angezeigt wird. Hier finden wir auf der Registerseite Format den folgenden Wert:
@;"Vorname"
Das bedeutet schlicht und einfach: Wenn der angezeigte Wert Null ist, zeige den Text aus dem zweiten Parameter an (siehe Bild 2). Das @-Zeichen ist ein Platzhalter für eine Zeichenkette. Sobald wir diesen Ausdruck für die Eigenschaft Format eingetragen haben und wieder zur Formularansicht wechseln, erscheint dieser Wert in dem Textfeld zur Eingabe des Vornamens – aber nur, wenn dieses noch leer ist.
Bild 2: Einstellen des Formats für die Anzeige eines Platzhalter-Textes
Klicken wir dieses Feld an und fügen so die Einfügemarke dort ein, verschwindet der Platzhalter, sodass wir direkt sehen, dass hier etwas eingegeben werden muss (siehe Bild 3).
Bild 3: Der Platzhalter verschwindet beim Anklicken des Textfeldes.
Wenn wir auf andere Weise zwischen diesen Steuerelementen navigieren, erhalten wir allerdings ein anderes Verhalten, das von der Einstellung der Option Cursorverhalten bei Eintritt in Feld abhängt. Diese stellen wir ein, indem wir mit Datei|Optionen den Optionen-Dialog öffnen, dort zum Bereich Clienteinstellungen wechseln und hier die entsprechende Option auf den gewünschten Wert setzen (siehe Bild 4).
Bild 4: Einstellungen für das Verhalten bei Eintreten in ein Feld
Bei Ganzes Feld markieren wird das ganze Feld markiert, aber der Platzhaltertext verschwindet nicht. Bei den beiden anderen Einstellungen wird der Platzhaltertext beim Eintritt in das Feld automatisch ausgeblendet.
Platzhaltertexte einfach angeben
Die Eingabe der Platzhaltertexte ist zwar einfach, aber wenn man dies für viele Steuerelemente machen möchte, ist die Arbeit ungefähr genauso aufwendig wie das Erstellen entsprechender Textfelder.
Also versuchen wir, das Ganze etwas zu vereinfachen. Zum Beispiel so, dass wir nicht alle Steuerelemente einzeln mit den entsprechenden Platzhaltern versehen müssen. Dies können wir nämlich auch per VBA erledigen.
Dazu benötigen wir lediglich eine Ereignisprozedur, die beim Öffnen des Formulars ausgeführt wird. Diese hinterlegen wir in diesem Fall für das Ereignis Beim Laden des Formulars:
Private Sub Form_Load() Me.txtVorname.Format = "@,""Vorname""" Me.txtNachname.Format = "@,""Nachname""" Me.txtStrasse.Format = "@,""Straße""" Me.txtPLZ.Format = "@,""PLZ""" Me.txtOrt.Format = "@,""Ort""" End Sub
Wir weisen also jeweils der Eigenschaft Format einen Ausdruck zu, der im Wesentlichen dem entspricht, den wir auch in das Eigenschaftenblatt eingetragen haben.
Mit dem Unterschied, dass wir diesen in Anführungszeichen einfassen müssen – und den Text, der bereits in Anführungszeichen steht, mit doppelten Anführungszeichen versehen:
Me.txtVorname.Format = "@,""Vorname"""
Wenn wir das Formular nun in der Formularansicht öffnen, erhalten wir genau die gleiche Ansicht wie zuvor.
Code per Code erstellen
Nun ist auch noch die Aufgabe, für jedes Textfeld eine solche Zeile zu schreiben, ein gewisser Aufwand.
Auch diesen können wir noch angenehmer machen, indem wir eine kleine Hilfsprozedur verwenden. Diese sieht wie in Listing 1 aus.
Public Sub Platzhaltersteuerelemente() Dim frm As Form Dim ctl As Control Dim strSteuerelementinhalt As String Set frm = Screen.ActiveForm For Each ctl In frm.Controls strSteuerelementinhalt = "" On Error Resume Next strSteuerelementinhalt = ctl.ControlSource On Error GoTo 0 If Not Len(strSteuerelementinhalt) = 0 Then Select Case ctl.ControlType Case acTextBox Debug.Print "Me." & ctl.Name & ".Format = ""@;""""" & ctl.ControlSource & """""""" Case Else ''Debug.Print ctl.ControlType End Select End If Next ctl End Sub
Listing 1: Prozedur zum Erstellen des Codes für die Format-Eigenschaft der Steuerelemente
Die Prozedur referenziert das aktuell geöffnete Formular mit der Variablen frm. Um den Code für ein bestimmtes Formular zu erstellen, müssen wir dieses also öffnen und es muss sich im Fokus befinden. Danach durchläuft die Prozedur alle Steuerelemente der Controls-Auflistung des Formulars in einer For Each-Schleife.
Hier prüfen wir zuerst, ob es sich bei dem Steuerelement um ein gebundenes Steuerelement handelt, also eines, das für die Eigenschaft Steuerelementinhalt einen Wert enthält. Für diese Prüfung leeren wir zuerst eine String-Variable namens strSteuerelementinhalt. Dann versuchen wir, die Eigenschaft ControlSource bei deaktivierter Fehlerbehandlung auszulesen.
Warum bei deaktivierter Fehlerbehandlung? Weil nicht alle Steuerelemente wie beispielsweise Bezeichnungsfelder diese Eigenschaft aufweisen. Wenn wir dennoch versuchen, für ein solches Steuerelement auf ControlSource zuzugreifen, löst dies einen Fehler aus, den wir hier verhindern wollen. Andererseits erhalten wir so genau das gewünschte Verhalten, nämlich dass strSteuerelementinhalt nur gefüllt wird, wenn die Eigenschaft ControlSource vorhanden ist.
Also können wir danach einfach prüfen, ob strSteuerelementinhalt eine Zeichenkette mit einer Länge ungleich 0 enthält. In diesem Fall wollen wir noch den Steuerelementtyp in einer Select Case-Bedingung untersuchen, denn wir wollen die Formatierung nur für Textfelder anwenden. Also prüfen wir ctl.ControlType auf den Wert acTextBox.
Ist auch diese Bedingung erfüllt, können wir die benötigte VBA-Zeile mit der Zuweisung des Ausdrucks für die Format-Eigenschaft erstellen. Da wir nicht genau wissen können, welcher Platzhaltertext verwendet werden soll, wählen wir hier erst einmal den Inhalt der Eigenschaft Steuerelementinhalt, also in der Regel den Namen des Feldes aus der zugrunde liegenden Tabelle.
Diese geben wir für alle betroffenen Steuerelemente im Direktbereich aus und erhalten so eine Ausgabe wie die folgende:
Me.txtPersonID.Format = "@;""PersonID""" Me.txtVorname.Format = "@;""Vorname""" Me.txtNachname.Format = "@;""Nachname""" Me.txtStrasse.Format = "@;""Strasse""" Me.txtPLZ.Format = "@;""PLZ""" Me.txtOrt.Format = "@;""Ort"""
Hier sehen wir, dass uns auch das Feld PersonID durchgerutscht ist, also das Primärschlüsselfeld der Tabelle.
Dieses übernehmen wir einfach nicht in die Form_Load-Ereignisprozedur, denn für dieses wird, wenn wir es mit einem Autowert versehen haben, ohnehin kein Platzhaltertext angezeigt. Stattdessen sehen wir im im Falle eines neuen Datensatzes den Wert (Neu) und für einen vorhandenen Datensatz den Primärschüsselwert im Steuerelement txtPersonID.
Anpassen der Format-Eigenschaft an einem Ort
Durch das Hinzufügen der oben beschriebenen Codezeilen mit der Zuweisung der Werte an die Format-Eigenschaft der Steuerelemente haben wir nun einen Ort, an dem wir komfortabel die gewünschten Platzhalter zuweisen können.
Platzhalter und Standardwerte
In einer Erweiterung haben wir noch zwei weitere Textfelder zur Tabelle tblPersonen und auch zum Formular hinzugefügt. Wir wollen noch prüfen, wie sich unsere Lösung mit Datums- und Zahlenfeldern schlägt. Also fügen wir noch die beiden folgenden Zeilen zu unserer Form_Load-Prozedur hinzu:
Me.txtGeburtsdatum.Format = "@;""Geburtsdatum""" Me.txtBewertung.Format = "@;""Bewertung"""
Nach dem Wechsel in die Formularansicht sehen wir, dass der Platzhalter problemlos mit dem Datumsfeld arbeitet (siehe Bild 5). Mit dem Zahlenfeld funktioniert der Ausdruck allerdings nicht. Hier erhält der in der Tabellendefinition festgelegte Standardwert offensichtlich die Priorität vor dem Platzhalter.
Bild 5: Der Standardwert hat eine höhere Priorität als der Platzhalter.
Wenn es tatsächlich einen Standardwert gibt, ist das praktisch.
In vielen Fällen, beispielsweise bei Zahlenfeldern, setzt Access beim Anlegen des Feldes automatisch die Eigenschaft Standardwert auf den Wert 0. Wenn man stattdessen lieber einen Platzhalter anzeigen möchte, hat man zwei Möglichkeiten:
- Entweder man entfernt den Standardwert direkt aus dem Tabellenentwurf oder
- man entfernt den Standardwert aus der gleichnamigen Eigenschaft des Textfeldes.
Letzteres gelingt wiederum nur per VBA. Gemeinsam mit der Zuweisung des Platzhalters benötigen wir für das Feld txtBewertung nun also zwei Anweisungen:
Me.txtBewertung.DefaultValue = "=Null" Me.txtBewertung.Format = "@;""Bewertung"""
Der in der ersten Zeile zugewiesene Ausdruck sieht merkwürdig aus. Eigentlich würde man meinen, dass wir einfach den Wert Null zuweisen könnten. Dies führt allerdings zu einem Fehler durch eine unzulässige Verwendung von Null.
Nachdem wir die zusätzliche Zeile hinzugefügt haben, wird auch der Platzhalter für das Zahlenfeld mit dem Standardwert 0 korrekt angezeigt.
Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...
den kompletten Artikel im PDF-Format mit Beispieldatenbank
diesen und alle anderen Artikel mit dem Jahresabo