{"id":55000516,"date":"2007-12-01T00:00:00","date_gmt":"2021-02-11T21:18:35","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=516"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Eingabe_in_Text_und_Kombinationsfelder_vereinfachen","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Eingabe_in_Text_und_Kombinationsfelder_vereinfachen\/","title":{"rendered":"Eingabe in Text- und Kombinationsfelder vereinfachen"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg02.met.vgwort.de\/na\/916f08aa4bbb4355aa61516c62300425\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Manchmal nervt es einfach, Daten in Textfelder einzugeben, aber in vielen F&auml;llen l&auml;sst sich dies nicht &auml;ndern. Wenn das Feld numerische Informationen enth&auml;lt, gibt es aber durchaus M&ouml;glichkeiten: Sie k&ouml;nnen es dann beispielsweise so programmieren, dass der Benutzer den enthaltenen Wert mit den Cursortasten erh&ouml;ht oder vermindert.<\/b><\/p>\n<\/div>\n<div class=\"story\">\n<p><b>Eingabevereinfachung<\/b><\/p>\n<p>Die Eingabe von Daten erfolgt leider immer noch nicht durch Gedankenkraft oder &uuml;ber ein mit dem Gehirn verbundenes USB-Kabel. Bis es so weit ist, sollten Sie Ihren Benutzern diese Arbeit zumindest vereinfachen &#8211; einige Anregungen finden Sie in diesem Artikel. Im Einzelnen sieht das folgenderma&szlig;en aus, wobei die Cursortasten jedes Mal eine entscheidende Rolle spielen:<\/p>\n<p>Die ersten beiden Beispiele zeigen, wie Sie die Eingabe von Datumsangaben mit verschiedenen Tastenkombinationen erleichtern. &uuml;blicherweise gibt man Datumsangaben wie ganz normalen Text ein, manche Anwendungen bieten dazu alternativ ein spezielles Steuerelement an, mit dem sich das Datum per Maus zusammenklicken l&auml;sst.<\/p>\n<p>Der Nachteil dieser L&ouml;sungen ist aber in der Regel, dass der Benutzer dazu die Maus verwenden muss. Wer schnell arbeiten m&ouml;chte, sollte sich allerdings auf die Tastatur konzentrieren &#8211; das Greifen der Maus, das Anklicken der Schaltfl&auml;che zum &ouml;ffnen des Steuerelements zur Datumseingabe und die Datumseingabe selbst nehmen offensichtlich nicht weniger Zeit in Anspruch als das Eingeben des Datums mit der Tastatur.<\/p>\n<p>Die erste Variante zur Eingabe von Datumsangaben verwendet verschiedene Tastenkombinationen, um die Teile des Datums (Tag, Monat, Jahr) zu &auml;ndern.<\/p>\n<p>Die Schaltfl&auml;chen <b>Cursor nach oben <\/b>und <b>Cursor nach unten <\/b>sind beispielsweise f&uuml;r das &auml;ndern des Tages verantwortlich, die Monate und Jahre passt man mit den gleichen Schaltfl&auml;chen bei gleichzeitig gedr&uuml;ckter <b>Strg<\/b>&#8211; und <b>Alt<\/b>-Taste an.<\/p>\n<p>Die zweite Variante kommt nur mit den beiden Tasten <b>Cursor nach oben <\/b>und <b>Cursor nach unten <\/b>aus. Um die verschiedenen Datumselemente zu ver&auml;ndern, positioniert man die Einf&uuml;gemarke zun&auml;chst auf dem entsprechenden Datumsteil und passt diesen dann mit den Cursortasten an.<\/p>\n<p>Auch Zahlen lassen sich in vielen F&auml;llen leichter mit Cursortasten als mit den Zahlentasten selbst ver&auml;ndern.<\/p>\n<p>Das dritte Beispiel zeigt daher, wie Sie die in einem Textfeld enthaltenen Zahlen per Cursortaste nach oben beziehungsweise nach unten korrigieren.<\/p>\n<p>Zuletzt noch ein Beispiel f&uuml;r den Einsatz von Kombinationsfeldern: Wer dort einen neuen Eintrag ausw&auml;hlen m&ouml;chte, muss dies erst entweder mit der Maus oder durch eine Tastenkombination (entweder <b>F4 <\/b>oder <b>Alt + Cursor nach unten<\/b>) erledigen. Viel sch&ouml;ner w&auml;re es doch, wenn man die in unmittelbarer Umgebung des aktuell ausgew&auml;hlten Eintrags befindlichen Elemente ganz einfach mit den Tasten <b>Umschalt + Strg + Alt +<\/b> <b>Cursor nach oben <\/b>beziehungsweise <b>Cursor nach unten <\/b>ausw&auml;hlen k&ouml;nnte &#8211; und zwar ohne das Aufklappen des Kombinationsfeldes.<\/p>\n<p><b>Nachteile<\/b><\/p>\n<p>Bei all den nachfolgend vorgestellten Beispielen ist zu ber&uuml;cksichtigen, dass meist die Cursortasten zum Einsatz kommen. Diese dienen &uuml;blicherweise zum Wechseln des aktuell markierten Steuerelements.<\/p>\n<p>Dies wird aber ohnehin selbst in den Dialogen der Office-Anwendungen und in Access-Formularen unterschiedlich gehandhabt (Erstere erlauben beispielsweise nicht das Verlassen von Kombinationsfeldern per Cursortaste, Letztere schon).<\/p>\n<p>Wer kann, sollte also am besten die Vorgehensweise seiner Benutzer studieren und gegebenenfalls alternative Steuerm&ouml;glichkeiten vorsehen, die der Benutzer per Option einstellen kann.<\/p>\n<p class=\"zwischen-berschrift-oberer-spaltenrand\">Grundlegendes<\/p>\n<p>Die wichtigste Technik dieses Beitrags ist das Abfangen von Benutzereingaben, und zwar der Cursortasten. Sie m&uuml;ssen erkennen, wann der Benutzer in den entsprechenden Steuerelementen die <b>Cursor nach oben <\/b>und <b>Cursor nach unten<\/b>-Tasten und ihre Kombinationen mit der <b>Umschalt<\/b>-, der <b>Strg<\/b>&#8211; und der <b>Alt<\/b>-Taste bet&auml;tigt. Dabei hilft die Ereignisprozedur <b>Bei Taste ab<\/b>, die jedes Steuerelement bereitstellt. Die passende Ereignisprozedur stellt zwei Parameter zur Verf&uuml;gung:<\/p>\n<ul>\n<li class=\"aufz-hlung\"><b>KeyCode<\/b>: Gibt den Zahlencode der gedr&uuml;ckten Taste zur&uuml;ck. F&uuml;r die Cursortasten sind dies beispielsweise die Werte <b>37 <\/b>(nach links), <b>38 <\/b>(nach oben), <b>39 <\/b>(nach rechts) und <b>40 <\/b>(nach unten). Man vereinfacht sich das Leben, wenn man die passenden VB-Konstanten verwendet, die beispielsweise der Objektkatalog offenbart (siehe Bild 1). Sie k&ouml;nnen aber auch einfach den Wert von <b>KeyCode <\/b>per <b>Debug.Print <\/b>ausgeben lassen, wenn Sie den Zahlenwert einer Taste erfahren m&ouml;chten.<\/li>\n<li class=\"aufz-hlung\"><b>Shift<\/b>: Gibt an, ob eine der Tasten <b>Umschalt <\/b>(<b>1<\/b>), <b>Strg <\/b>(<b>2<\/b>) oder <b>Alt <\/b>(<b>4<\/b>) gedr&uuml;ckt wurde; ist dies nicht der Fall, lautet der Wert <b>0<\/b>. Kombinationen der Tasten erkennt man an der Summe der entsprechenden Werte. Der Wert <b>7 <\/b>w&uuml;rde beispielsweise bedeuten, dass der Benutzer alle drei Tasten gleichzeitig gedr&uuml;ckt h&auml;tte (<b>1<\/b>+<b>2<\/b>+<b>4<\/b>). Auch hier gibt es Konstanten: <b>acShiftMask<\/b>, <b>acCtrlMask <\/b>und <b>acAltMask<\/b>.<\/li>\n<\/ul>\n<div class=\"image\">\n    <img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2007_05\/TextfelderMitCursortasten-web-images\/abb001_opt.jpeg\" alt=\"abb001.tif\" \/>\n<\/div>\n<div class=\"story\">\n<p><b><span style=\"color:darkgrey\">Bild 1: Der Objektkatalog liefert bei Bedarf die VB-Konstanten f&uuml;r die KeyCode-Werte.<\/span><\/b><\/p>\n<\/div>\n<p>Wenn Sie nun m&ouml;chten, dass etwas Spezielles passiert, wenn der Benutzer innerhalb eines Textfeldes die <b>Cursor nach unten<\/b>-Taste dr&uuml;ckt, verwenden Sie etwa die folgende Routine:<\/p>\n<pre>Private Sub txtBeispiel_KeyDown(KeyCode _<br \/>        As Integer, Shift As Integer)\r\n    If KeyCode = vbKeyDown Then\r\n        &apos;Do something\r\n        KeyCode = 0\r\n    End If\r\nEnd Sub<\/pre>\n<p>Sie fragen also &uuml;ber den Parameter <b>KeyCode<\/b> ab, ob der Benutzer die <b>Cursor nach unten<\/b>-Taste bet&auml;tigt hat, und lassen in diesem Fall den gew&uuml;nschten Code ausf&uuml;hren.<\/p>\n<p>Wichtig ist, dass Sie dem Parameter <b>KeyCode <\/b>im Anschluss den Wert <b>0 <\/b>zuweisen, damit Access auch nur die hier angegebene Aktion und nicht die eigentliche durch das Bet&auml;tigen der Taste ausgel&ouml;ste Funktion aufruft.<\/p>\n<p>Nat&uuml;rlich kann dies auch gew&uuml;nscht sein &#8211; in diesem Fall lassen Sie die Zeile einfach weg.<\/p>\n<p><b>Tastenvorschau<\/b><\/p>\n<p>Wie die einzelnen Steuerelemente besitzt auch das Formular ein <b>Bei Taste ab<\/b>-Ereignis. Mit der Eigenschaft <b>Tastenvorschau <\/b>legen Sie fest, ob dieses ausgef&uuml;hrt werden soll. Ist diese Eigenschaft auf <b>Ja <\/b>eingestellt und enthalten sowohl das Formular als auch ein Steuerelement ein <b>Bei Taste ab<\/b>-Ereignis, wird das des Formulars zuerst ausgef&uuml;hrt. Beachten Sie, dass ein Einstellen von <b>KeyCode<\/b> auf den Wert <b>0 <\/b>sich auch auf das nachfolgend aufgerufene Ereignis des Steuerelements auswirkt.<\/p>\n<p><b>Textfeldinhalt beeinflussen<\/b><\/p>\n<p>Grunds&auml;tzlich gibt man Texte in Textfelder ein, indem man den Fokus auf das Textfeld setzt und dann mit der Tastatur den passenden Wert eintippt. Gegebenenfalls kann man dort nat&uuml;rlich auch Informationen aus der Zwischenablage einf&uuml;gen.<\/p>\n<p>Wenn das Feld schon einen Wert enth&auml;lt, muss man diesen erst noch l&ouml;schen, bevor man den neuen Wert eintr&auml;gt &#8211; dies kann man sich erleichtern, indem man daf&uuml;r sorgt, dass beim Eintreten in ein Feld direkt der komplette Inhalt markiert wird.<\/p>\n<p>Die Eingabe des ersten neuen Zeichens f&uuml;hrt dann dazu, dass der vorhandene Inhalt gel&ouml;scht wird (mehr dazu im Beitrag <b>Verhalten beim Feldeintritt<\/b> in der kommenden Ausgabe, Shortlink 540).<\/p>\n<p><b>Datumseingabe vereinfachen, Variante 1<\/b><\/p>\n<p>Die Eingabe von Datumsangaben k&ouml;nnen Sie sich bereits mit den richtigen Tastenkombinationen erleichtern (siehe Bild 2).<\/p>\n<div class=\"image\">\n    <img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2007_05\/TextfelderMitCursortasten-web-images\/abb002_opt.jpeg\" alt=\"abb002.tif\" \/>\n<\/div>\n<div class=\"story\">\n<p><b><span style=\"color:darkgrey\">Bild 2: Die erste Variante der vereinfachten Datumseingabe<\/span><\/b><\/p>\n<\/div>\n<div class=\"image\">\n    <img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2007_05\/TextfelderMitCursortasten-web-images\/abb003_opt.jpeg\" alt=\"abb003.tif\" \/>\n<\/div>\n<div class=\"story\">\n<p><b><span style=\"color:darkgrey\">Bild 2: Nur mit den Cursortasten ist die Datumseingabe noch intuitiver.<\/span><\/b><\/p>\n<\/div>\n<p>So f&uuml;gen <b>Strg + Umschalt + , <\/b>das Datum und <b>Strg + Umschalt + . <\/b>die aktuelle Uhrzeit hinzu. Diese Tastenkombinationen kennt aber in der Regel kein normaler Benutzer. Und das Problem ist, dass er auch s&auml;mtliche Tastenkombinationen, die Sie f&uuml;r Ihre Steuerelemente vorsehen, nicht kennt. Es gibt also zwei M&ouml;glichkeiten:<\/p>\n<ul>\n<li class=\"aufz-hlung\">Der Benutzer gibt die Daten wie &uuml;blich ein.<\/li>\n<li class=\"aufz-hlung\">Sie teilen dem Benutzer die Tastenkombinationen mit, die ihm die Arbeit bei der Dateneingabe erleichtern.<\/li>\n<\/ul>\n<p>Letzteres setzt voraus, dass der Benutzer &uuml;berhaupt von seiner gewohnten Arbeitsweise abweichen m&ouml;chte, daher k&ouml;nnen Sie ihm die Vereinfachung nat&uuml;rlich nur anbieten. Das erledigen Sie beispielsweise durch einen entsprechenden Steuerelement-TipText. Bevor Sie das tun, schauen Sie sich allerdings erstmal an, wie man die Datumseingabe &uuml;berhaupt vereinfachen kann.<\/p>\n<p>Die Routine, die hier durch das <b>Bei Taste Ab<\/b>-Ereignis ausgel&ouml;st wird, sieht wie in Listing 1 aus. Sie pr&uuml;ft zun&auml;chst, welchen Wert <b>Shift <\/b>liefert, und dann den jeweiligen <b>KeyCode<\/b>. Zuvor pr&uuml;ft die Routine allerdings noch, ob das Textfeld &uuml;berhaupt einen Wert enth&auml;lt, und f&uuml;gt, wenn das nicht der Fall ist, das aktuelle Datum ein. Ist ein Datum vorhanden, wirken sich einige Tastenkombinationen wie folgt aus:<\/p>\n<div class=\"abbildung\">\n<p class=\"tabellenkopf\">Listing 1: Anpassen des Datums in einem Textfeld nur mit Strg, Alt, Cursor nach oben und Cursor nach unten.<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">Private Sub txtDatum_KeyDown(KeyCode As Integer, Shift As Integer)<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">    Dim txt As Access.TextBox<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">    If KeyCode = vbKeyUp Or KeyCode = vbKeyDown Then<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">        Set txt = Me!txtDatum<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">        If Len(Nz(txt.Text)) = 0 Then<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">            txt.Text = Date<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">        Else<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">            Select Case Shift<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                Case 0<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                    Select Case KeyCode<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                        Case vbKeyUp<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                            txt.Text = DateAdd(&quot;d&quot;, 1, txt.Text)<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                        Case vbKeyDown<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                            txt.Text = DateAdd(&quot;d&quot;, -1, txt.Text)<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                    End Select<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                Case acCtrlMask<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                    Select Case KeyCode<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                        Case vbKeyUp<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                            txt.Text = DateAdd(&quot;m&quot;, 1, txt.Text)<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                        Case vbKeyDown<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                            txt.Text = DateAdd(&quot;m&quot;, -1, txt.Text)<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                    End Select<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                Case acAltMask<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                    Select Case KeyCode<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                        Case vbKeyUp<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                            txt.Text = DateAdd(&quot;yyyy&quot;, 1, txt.Text)<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                        Case vbKeyDown<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                            txt.Text = DateAdd(&quot;yyyy&quot;, -1, txt.Text)<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">            &amp;<\/p>\n<\/div>\n<ul>\n<li class=\"aufz-hlung\"><b>Cursor nach oben<\/b>: n&auml;chster Tag<\/li>\n<li class=\"aufz-hlung\"><b>Cursor nach unten<\/b>: vorheriger Tag<\/li>\n<li class=\"aufz-hlung\"><b>Strg + Cursor nach oben<\/b>: n&auml;chster Monat<\/li>\n<li class=\"aufz-hlung\"><b>Strg + Cursor nach unten<\/b>: vorheriger Monat<\/li>\n<li class=\"aufz-hlung\"><b>Alt + Cursor nach oben<\/b>: n&auml;chstes Jahr<\/li>\n<li class=\"aufz-hlung\"><b>Alt + Cursor nach unten<\/b>: vorheriges Jahr<\/li>\n<\/ul>\n<p><!--30percent--><\/p>\n<p>Die dabei verwendete Funktion <b>DateAdd <\/b>ist dabei so schlau, dass beispielsweise das Addieren eines Monats zum Datum 31.1.2007 automatisch den 28.2.2007 ergibt.<\/p>\n<p>Wichtig sind hier folgende Aspekte: Arbeiten Sie immer mit der <b>Text<\/b>-Eigenschaft des jeweiligen Wertes. Der Grund ist, dass beispielsweise <b>Me!txtDatum <\/b>eigentlich den Wert der Eigenschaft <b>Me!txtDatum.Value <\/b>liefert. Wenn der Benutzer jedoch den Inhalt des Feldes &auml;ndert, ohne das Feld zu aktualisieren, indem er beispielsweise zu einem anderen Feld wechselt oder den Datensatz speichert, besitzt die Eigenschaft <b>Value <\/b>noch immer den Wert, den das Feld zu Beginn hatte. Die <b>Text<\/b>-Eigenschaft gibt immer den angezeigten Inhalt eines Textfeldes aus.<\/p>\n<p>Die Routine pr&uuml;ft zun&auml;chst, ob das Textfeld noch leer ist, und f&uuml;gt gegebenenfalls das aktuelle Datum hinzu (dies ist Geschmackssache; man k&ouml;nnte auch das Datum des vorherigen Datensatzes als Standardwert vorgeben). Anschlie&szlig;end f&uuml;hrt sie die Aktion f&uuml;r die jeweilige Tastenkombination aus.<\/p>\n<p class=\"zwischen-berschrift-oberer-spaltenrand\">Datumseingabe vereinfachen, Variante 2<\/p>\n<p>Die zweite Variante soll auf zus&auml;tzliche Tasten wie die <b>Strg<\/b>&#8211; und die <b>Alt<\/b>-Taste verzichten und genau den Datumsteil um eins erh&ouml;hen oder vermindern, auf dem sich die Einf&uuml;gemarke gerade befindet. Zus&auml;tzlich soll dieser Teil komplett markiert werden, damit der Benutzer gut erkennen kann, auf welchen Teil sich das Bet&auml;tigen der Tasten <b>Cursor nach oben <\/b>und <b>Cursor nach unten <\/b>auswirkt. Auch die beiden Tasten <b>Cursor nach links <\/b>und <b>Cursor nach rechts <\/b>werden hier ber&uuml;cksichtigt: Sie sorgen daf&uuml;r, dass jeweils der benachbarte Teil des Datums angesprungen und markiert wird.<\/p>\n<p>Das ist nicht ganz trivial und bedarf vor allem eines Hinweises: Die Routine aus Listing 2 funktioniert nur, wenn das Kombinationsfeld das deutsche Datumsformat (dd.mm.yyyy) enth&auml;lt. F&uuml;r andere Formate sind entsprechende Anpassungen notwendig, eine flexible Variante h&auml;tte hier den Rahmen gesprengt.<\/p>\n<div class=\"abbildung\">\n<p class=\"tabellenkopf\">Listing 2: Einstellen des Datums mit den vier Cursortasten (Teil 1)<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">Private Sub txtDatumNachPosition_KeyDown(KeyCode As Integer, Shift As Integer)<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">    Dim txt As Access.TextBox<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">    Dim intDatumsteil As eDatumsteil<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">    Dim intPosition As Integer<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">    Dim intTrenner1 As Integer<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">    Dim intTrenner2 As Integer<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">    If KeyCode &gt;= vbKeyLeft And KeyCode &lt;= vbKeyDown Then<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">        Set txt = Me!txtDatumNachPosition<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">        If Len(Nz(txt.Text, &quot;&quot;)) = 0 Then<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">            txt.Text = Date<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">        End If<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">        intPosition = txt.SelStart<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">        intTrenner1 = InStr(1, txt.Text, cStrTrennzeichen)<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">        intTrenner2 = InStr(intTrenner1 + 1, txt.Text, cStrTrennzeichen)<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">        Select Case intPosition<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">            Case Is &lt; intTrenner1<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                intDatumsteil = eTag<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">            Case Is &lt; intTrenner2<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                intDatumsteil = eMonat<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">            Case Else<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                intDatumsteil = eJahr<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">        End Select<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">        Select Case KeyCode<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">            Case vbKeyLeft<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                Select Case intDatumsteil<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                    Case eTag<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                        intDatumsteil = eJahr<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                        txt.SelStart = intTrenner2<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                        txt.SelLength = Len(txt.Text) &#8211; intTrenner2 + 1<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                    Case eMonat<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                        intDatumsteil = eTag<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                        txt.SelStart = 0<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                        txt.SelLength = intTrenner1 &#8211; 1<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">            &amp;<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">         Case vbKeyUp<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                Select Case intDatumsteil<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                    Case eTag<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                        txt.Text = DateAdd(&quot;d&quot;, 1, txt.Text)<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                        txt.SelStart = 0<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                        txt.SelLength = intTrenner1 &#8211; 1<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                    Case eMonat<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                        txt.Text = DateAdd(&quot;m&quot;, 1, txt.Text)<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                        txt.SelStart = intTrenner1<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                        txt.SelLength = intTrenner2 &#8211; intTrenner1 &#8211; 1<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                    Case eJahr<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                        txt.Text = DateAdd(&quot;yyyy&quot;, 1, txt.Text)<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                        txt.SelStart = intTrenner2<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                        txt.SelLength = Len(txt.Text) &#8211; intTrenner2 + 1<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                End Select<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">            Case vbKeyRight<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                Select Case intDatumsteil<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                    Case eTag<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                        intDatumsteil = eMonat<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                        txt.SelStart = intTrenner1<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                        txt.SelLength = intTrenner2 &#8211; intTrenner1 &#8211; 1<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                    Case eMonat<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                        intDatumsteil = eJahr<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                        txt.SelStart = intTrenner2<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                        txt.SelLength = Len(txt.Text) &#8211; intTrenner2 + 1<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                    Case eJahr<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">            &amp;<\/p>\n<\/div>\n<p>Die Routine pr&uuml;ft zun&auml;chst, ob der Benutzer eine der vier Cursortasten bet&auml;tigt hat, und f&uuml;gt das aktuelle Datum hinzu, falls das Textfeld noch leer ist. Dann ermittelt sie die aktuelle Position der Einf&uuml;gemarke und die Position der Trennzeichen der einzelnen Datumsteile &#8211; hier also des Punktes. Dieses wird &uuml;brigens in einer Konstanten gespeichert, damit man gegebenenfalls leicht ein anderes Zeichen einstellen kann:<\/p>\n<pre>Const cStrTrennzeichen As String = &quot;.&quot;<\/pre>\n<p>Das erste <b>Select Case<\/b>-Konstrukt ermittelt, auf welchem Element sich die Einf&uuml;gemarke gerade befindet. Dazu enth&auml;lt das Modul spezielle Enumerationskonstanten:<\/p>\n<pre>Enum eDatumsteil\r\n    eTag = 0\r\n    eMonat = 1\r\n    eJahr = 2\r\nEnd Enum<\/pre>\n<p>Dann beginnt schon die eigentliche Arbeit &#8211; das Auswerten der gedr&uuml;ckten Taste. Falls es sich um die Taste <b>vbKeyLeft <\/b>oder <b>vbKeyRight <\/b>handelt, ermittelt die Routine in einem weiteren <b>Select Case<\/b>-Konstrukt, auf welchem Element sich die Einf&uuml;gemarke gerade befindet, und verschiebt diese &#8211; je nach gedr&uuml;ckter Taste &#8211; auf das vorherige oder nachfolgende Element. Befindet sich der Fokus auf dem ersten Element und bet&auml;tigt der Benutzer die <b>Cursor nach links<\/b>-Taste, wird der Fokus auf das letzte Element, hier also das Jahr, verschoben. Handelt es sich bei der gedr&uuml;ckten Taste um die <b>Cursor nach oben<\/b>&#8211; oder <b>Cursor nach unten<\/b>-Taste, pr&uuml;ft die Routine ebenfalls die aktuelle Position der Einf&uuml;gemarke und erh&ouml;ht beziehungsweise vermindert die aktuelle Position um eins. Sch&ouml;n w&auml;re nat&uuml;rlich, wenn das Textfeld beim Erhalt des Fokus direkt das erste Element, hier also den Tag, entsprechend markiert. Daf&uuml;r sorgt die folgende Ereignisprozedur:<\/p>\n<pre>Private Sub txtDatumNachPosition_GotFocus()\r\n    Dim txt As Access.TextBox\r\n    Set txt = Me!txtDatumNachPosition\r\n    If IsDate(txt) Then\r\n        txt.SelStart = 0\r\n        txt.SelLength = _<br \/>            InStr(1, txt, _<br \/>            cStrTrennzeichen) _<br \/>            - 1\r\n    End If\r\nEnd Sub<\/pre>\n<p class=\"zwischen-berschriftnachquellcode\">Zahleneingabe vereinfachen<\/p>\n<p>Etwas komplizierter, je nach den enthaltenen Werten, ist das Ver&auml;ndern von Zahlen durch entsprechende Tastenkombinationen. Das Erh&ouml;hen oder Vermindern des aktuellen Wertes um den Wert <b>1 <\/b>ist noch das Einfachste und kann etwa so wie in Listing 3 erledigt werden. Auch diese Routine pr&uuml;ft zun&auml;chst, ob das Textfeld noch leer ist, und tr&auml;gt gegebenenfalls den Wert <b>0 <\/b>ein. Ist der enthaltene Wert nicht numerisch, nimmt die Routine keine &auml;nderung vor. Anschlie&szlig;end kann der Benutzer mit den beiden Tasten <b>Cursor nach oben <\/b>und <b>Cursor nach unten <\/b>den Wert jeweils um eins &auml;ndern (siehe Bild 4).<\/p>\n<div class=\"abbildung\">\n<p class=\"tabellenkopf\">Listing 3: Erh&ouml;hen und vermindern des aktuellen Zahlenwerts eines Textfelds<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">Private Sub txtEinfacheZahlen_KeyDown(KeyCode As Integer, Shift As Integer)<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">    Dim txt As Access.TextBox<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">    If KeyCode = vbKeyUp Or KeyCode = vbKeyDown Then<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">        Set txt = Me!txtEinfacheZahlen<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">        If Len(Nz(txt.Text)) = 0 Then<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">            txt = 0<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">        Else<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">            If IsNumeric(txt.Text) Then<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                Select Case KeyCode<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                    Case vbKeyUp<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                            txt.Text = txt.Text + 1<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                    Case vbKeyDown<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                            txt.Text = txt.Text &#8211; 1<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                End Select<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">            End If<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">        End If<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">        KeyCode = 0<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">    End If<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">End Sub<\/p>\n<\/div>\n<div class=\"image\">\n    <img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2007_05\/TextfelderMitCursortasten-web-images\/abb004_opt.jpeg\" alt=\"abb004.tif\" \/>\n<\/div>\n<div class=\"story\">\n<p><b><span style=\"color:darkgrey\">Bild 4: Vergr&ouml;&szlig;ern und verkleinern von Zahlen<\/span><\/b><\/p>\n<\/div>\n<p>Die Routine funktioniert so prinzipiell wie gew&uuml;nscht, allerdings mit einem kleinen Sch&ouml;nheitsfehler: Egal, wo die Einf&uuml;gemarke sich vor dem Bet&auml;tigen einer der Cursortasten befindet, sie wird anschlie&szlig;end an den Beginn des enthaltenen Textes gesetzt.<\/p>\n<p>Damit dies nicht passiert, soll sich die Routine merken, wo sich die Einf&uuml;gemarke zu Beginn befindet, und diese dort anschlie&szlig;end wieder positionieren. Es gibt auch einen Spezialfall: Wenn sich die Einf&uuml;gemarke am Ende befindet, soll sie sich auch nach dem &auml;ndern des Wertes wieder dort befinden.<\/p>\n<p>Das betrifft solche &auml;nderungen, welche die Anzahl der Stellen der angezeigten Zahl beeinflussen. Wenn Sie also zum Wert <b>99 <\/b>die Zahl <b>1 <\/b>hinzuz&auml;hlen, soll sich die Einf&uuml;gemarke anschlie&szlig;end hinter der dritten und nicht hinter der zweiten Stelle befinden. Dies erledigt die modifizierte Variante der Routine, die Sie in Listing 4 finden. Die neu hinzugekommenen Zeilen sorgen daf&uuml;r, dass sich die Routine die Position der Einf&uuml;gemarke (<b>SelStart<\/b>) sowie die Anzahl der markierten Zeichen (<b>SelLength<\/b>) merkt. Hat der Benutzer tats&auml;chlich eine der beiden Tasten <b>Cursor nach oben <\/b>oder <b>Cursor nach unten <\/b>bet&auml;tigt, stellen die letzten Zeilen der Routine den alten Zustand wieder her.<\/p>\n<div class=\"abbildung\">\n<p class=\"tabellenkopf\">Listing 4: Zahlenwerte &auml;ndern unter Beibehaltung der Cursorposition<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">Private Sub txtEinfacheZahlen_KeyDown(KeyCode As Integer, _<br \/>        Shift As Integer)<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">    Dim txt As Access.TextBox<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">    Dim intSelStart As Integer<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">    Dim intSelLength As Integer<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">    Dim bolSelEnd As Boolean<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">    Dim bolSelAll As Boolean<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">    If KeyCode = vbKeyUp Or KeyCode = vbKeyDown Then<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">        Set txt = Me!txtEinfacheZahlen<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">        intSelStart = txt.SelStart<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">        intSelLength = txt.SelLength<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">        If intSelStart = Len(txt) Then<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">            bolSelEnd = True<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">        End If<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">        If intSelLength = Len(txt) Then<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">            bolSelAll = True<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">        End If<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">        If Len(Nz(txt.Text)) = 0 Then<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">            txt = 0<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">        Else<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">            If IsNumeric(txt.Text) Then<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                Select Case KeyCode<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                    Case vbKeyUp<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                            txt.Text = txt.Text + 1<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                    Case vbKeyDown<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                            txt.Text = txt.Text &#8211; 1<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                End Select<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">            End If<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">        End If<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">        If bolSelEnd Then<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">            txt.SelStart = Len(txt.Text)<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">        Else<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">            txt.SelStart = intSelStart<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">        End If<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">        txt.SelLength = intSelLength<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">        If bolSelAll Then txt.SelLength = Len(txt.Text)<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">        KeyCode = 0<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">    End If<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">End Sub<\/p>\n<\/div>\n<p><b>Kombinationsfelder mit den Cursortasten steuern<\/b><\/p>\n<p>Die vierte und letzte Technik dieses Beitrags dreht sich um die &auml;nderung des aktuell angezeigten Eintrags von Kombinationsfeldern. Dabei soll das Bet&auml;tigen der <b>Cursor nach oben<\/b>&#8211; beziehungsweise <b>Cursor nach unten<\/b>-Schaltfl&auml;che bewirken, dass der vorherige beziehungsweise n&auml;chste Eintrag ausgew&auml;hlt wird, ohne das Kombinationsfeld aufzuklappen.<\/p>\n<p>Listing 5 zeigt, wie das funktioniert. Genau wie schon im Textfeld soll auch hier die aktuelle Position der Einf&uuml;gemarke und eine eventuell vorliegende Markierung beibehalten werden. Damit Access den jeweils vorherigen oder darauffolgenden Eintrag ausw&auml;hlt, muss die Routine zun&auml;chst einmal den Index des aktuellen Eintrags ermitteln. Dazu verwendet sie die Eigenschaft <b>ListIndex<\/b>. Um einen neuen Eintrag &uuml;ber den Index auszuw&auml;hlen (also nicht etwa &uuml;ber den Wert der gebundenen Spalte), ermitteln Sie zun&auml;chst den eigentlichen Wert &uuml;ber die Eigenschaft <b>ItemData <\/b>mit dem zuvor ermittelten Index.<\/p>\n<div class=\"abbildung\">\n<p class=\"tabellenkopf\">Listing 5: Einfaches Ausw&auml;hlen des aktuellen Eintrags in Kombinationsfeldern<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">Private Sub cboSchnellauswahl_KeyDown(KeyCode As Integer, _<br \/>        Shift As Integer)<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">    Dim intSelStart As Integer<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">    Dim intSelLength As Integer<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">    Dim bolSelEnd As Boolean<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">    Dim bolSelAll As Boolean<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">    Dim cbo As Access.ComboBox<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">    If (KeyCode = vbKeyUp Or KeyCode = vbKeyDown) And Shift = 0 Then<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">        Set cbo = Me!cboSchnellauswahl<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">        intSelStart = cbo.SelStart<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">        intSelLength = cbo.SelLength<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">        If intSelStart = Len(cbo) Then<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">            bolSelEnd = True<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">        End If<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">        If intSelLength = Len(cbo) Then<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">            bolSelAll = True<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">        End If<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">        Select Case KeyCode<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">            Case vbKeyUp<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                If Nz(cbo, 0) = 0 Then<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                    cbo = cbo.ItemData(0)<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                Else<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                    If cbo &gt; -1 And Not cbo.ListIndex = 0 Then<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                        cbo = cbo.ItemData(cbo.ListIndex &#8211; 1)<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                    End If<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                End If<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">            Case vbKeyDown<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                If Nz(cbo, 0) = 0 Then<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                    cbo = cbo.ItemData(0)<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                Else<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                    If cbo &gt; -1 And Not cbo.ListIndex = _<br \/>                            cbo.ListCount &#8211; 1 Then<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                        cbo = cbo.ItemData(cbo.ListIndex + 1)<\/p>\n<p class=\"quellcode-funktionssammlung-1-5\">                    End If<\/p>\n<\/div>\n<p><b>Von der Ereignisprozedur zur eigenst&auml;ndigen Routine<\/b><\/p>\n<p>Was im Beispielformular in Form von Ereignisprozeduren gut funktioniert, wird nat&uuml;rlich un&uuml;bersichtlich, wenn Sie es an allen m&ouml;glichen Stellen integrieren. Daher sollten Sie die betroffenen Codezeilen in eigenen Routinen in einem Standardmodul unterbringen. Am Beispiel der Funktion zum &auml;ndern des in einem Textfeld enthaltenen Datums mit den vier Cursortasten sieht das wie folgt aus: Zun&auml;chst erstellen Sie eine leere Funktion, die einen Verweis auf das betroffene Steuerelement erwartet. Diese Funktion enth&auml;lt prinzipiell den gleichen Code wie die Ereignisprozedur und sieht schlie&szlig;lich so aus:<\/p>\n<pre>Public Sub ChangeDateWithCursor(KeyCode As _<br \/>        Integer, Shift As Integer, _<br \/>        txt As Access.TextBox)\r\n    ...\r\nEnd Sub<\/pre>\n<p>Die zwei wesentlichen Unterschiede zur Ereignisprozedur sind folgende:<\/p>\n<ul>\n<li class=\"aufz-hlung\">Der Verweis auf das Steuerelement wird mit dem Parameter <b>txt <\/b>&uuml;bergeben.<\/li>\n<li class=\"aufz-hlung\">Die Zuweisung des Steuerelements per <b>Set txt = Me.txt&#8230; <\/b>entf&auml;llt somit (sie w&uuml;rde auch gar nicht funktionieren, weil man vom Standardmodul aus gar nicht auf das <b>Me<\/b>-Objekt zugreifen kann).<\/li>\n<\/ul>\n<p>Der Aufruf in der Ereignisprozedur sieht dann beispielsweise so aus:<\/p>\n<pre>Private Sub txtDatumMitFunktion_KeyDown _<br \/>        (KeyCode As Integer, Shift As Integer)\r\n    ChangeDateWithCursor KeyCode, _<br \/>        Shift, Me!txtDatumMitFunktion\r\nEnd Sub<\/pre>\n<p>Dadurch, dass der Parameter <b>KeyCode <\/b>standardm&auml;&szlig;ig als Referenz auf den passenden Wert an die Prozedur &uuml;bergeben wird, wirken sich &auml;nderungen auch auf die entsprechende Variable der aufrufenden Prozedur aus.<\/p>\n<p><b>Zusammenfassung und Ausblick<\/b><\/p>\n<p>Dieser Artikel zeigt nur einige von vielen M&ouml;glichkeiten zur Optimierung der Funktionsweise von Steuerelementen. Diese k&ouml;nnen Sie je nach Arbeitsweise so in eigene Anwendungen &uuml;bernehmen oder m&uuml;ssen sie entsprechend anpassen &#8211; wenn Sie etwa die hier verwendeten Tastenkombinationen schon benutzen, finden Sie sicher eine andere, sinnvolle Art, die Funktionen anzusprechen.<\/p>\n<p>Wenn Sie ein Standardmodul bauen, das alle Routinen f&uuml;r den Einsatz mit Steuerelementen enth&auml;lt, k&ouml;nnen Sie dieses leicht in andere Datenbanken einf&uuml;gen und die Funktionen auch in den dortigen Steuerelementen einsetzen. Die Funktionen m&uuml;ssen au&szlig;erdem hier und da noch durch Fehlerbehandlungen und zus&auml;tzliche Validierungen stabiler gemacht werden. Die Funktion zum &auml;ndern der Elemente eines Datums &uuml;ber die Cursortasten erlaubt beispielsweise auch die Eingabe von Tag, Monat und Jahr &uuml;ber die &uuml;blichen Zahlentasten. Wenn der Benutzer hier unsinnige Werte eingibt, kann das schnell zu Problemen f&uuml;hren &#8211; das Erh&ouml;hen des Datums 1.13.2007 f&uuml;hrt so beispielsweise direkt zu einem Fehler. Dies l&auml;sst sich aber mit wenigen zus&auml;tzlichen Zeilen ausb&uuml;geln.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>Steuerelementoptimierung.mdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/79FD5292-11E3-4C90-AF46-3F15F59A2757\/aiu_516.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Manchmal nervt es einfach, Daten in Textfelder einzugeben, aber in vielen F&auml;llen l&auml;sst sich dies nicht &auml;ndern. Wenn das Feld numerische Informationen enth&auml;lt, gibt es aber durchaus M&ouml;glichkeiten: Sie k&ouml;nnen es dann beispielsweise so programmieren, dass der Benutzer den enthaltenen Wert mit den Cursortasten erh&ouml;ht oder vermindert.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662007,66062007,44000028,44000023],"tags":[],"class_list":["post-55000516","post","type-post","status-publish","format-standard","hentry","category-662007","category-66062007","category-Ergonomie_und_Benutzeroberflaeche","category-Mit_Formularen_arbeiten"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Eingabe in Text- und Kombinationsfelder vereinfachen - Access im Unternehmen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-im-unternehmen.de\/Eingabe_in_Text_und_Kombinationsfelder_vereinfachen\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Eingabe in Text- und Kombinationsfelder vereinfachen\" \/>\n<meta property=\"og:description\" content=\"Manchmal nervt es einfach, Daten in Textfelder einzugeben, aber in vielen F&auml;llen l&auml;sst sich dies nicht &auml;ndern. Wenn das Feld numerische Informationen enth&auml;lt, gibt es aber durchaus M&ouml;glichkeiten: Sie k&ouml;nnen es dann beispielsweise so programmieren, dass der Benutzer den enthaltenen Wert mit den Cursortasten erh&ouml;ht oder vermindert.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Eingabe_in_Text_und_Kombinationsfelder_vereinfachen\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2021-02-11T21:18:35+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg02.met.vgwort.de\/na\/916f08aa4bbb4355aa61516c62300425\" \/>\n<meta name=\"author\" content=\"Andr\u00e9 Minhorst\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andr\u00e9 Minhorst\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"18\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Eingabe_in_Text_und_Kombinationsfelder_vereinfachen\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Eingabe_in_Text_und_Kombinationsfelder_vereinfachen\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Eingabe in Text- und Kombinationsfelder vereinfachen\",\"datePublished\":\"2021-02-11T21:18:35+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Eingabe_in_Text_und_Kombinationsfelder_vereinfachen\\\/\"},\"wordCount\":3563,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Eingabe_in_Text_und_Kombinationsfelder_vereinfachen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/916f08aa4bbb4355aa61516c62300425\",\"articleSection\":[\"2007\",\"6\\\/2007\",\"Ergonomie und Benutzeroberfl\u00e4che\",\"Mit Formularen arbeiten\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Eingabe_in_Text_und_Kombinationsfelder_vereinfachen\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Eingabe_in_Text_und_Kombinationsfelder_vereinfachen\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Eingabe_in_Text_und_Kombinationsfelder_vereinfachen\\\/\",\"name\":\"Eingabe in Text- und Kombinationsfelder vereinfachen - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Eingabe_in_Text_und_Kombinationsfelder_vereinfachen\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Eingabe_in_Text_und_Kombinationsfelder_vereinfachen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/916f08aa4bbb4355aa61516c62300425\",\"datePublished\":\"2021-02-11T21:18:35+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Eingabe_in_Text_und_Kombinationsfelder_vereinfachen\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Eingabe_in_Text_und_Kombinationsfelder_vereinfachen\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Eingabe_in_Text_und_Kombinationsfelder_vereinfachen\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/916f08aa4bbb4355aa61516c62300425\",\"contentUrl\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/916f08aa4bbb4355aa61516c62300425\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Eingabe_in_Text_und_Kombinationsfelder_vereinfachen\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Eingabe in Text- und Kombinationsfelder vereinfachen\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"name\":\"Access im Unternehmen\",\"description\":\"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/access-im-unternehmen.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\",\"name\":\"Andr\u00e9 Minhorst Verlag\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"contentUrl\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"width\":370,\"height\":111,\"caption\":\"Andr\u00e9 Minhorst Verlag\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Eingabe in Text- und Kombinationsfelder vereinfachen - Access im Unternehmen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/access-im-unternehmen.de\/Eingabe_in_Text_und_Kombinationsfelder_vereinfachen\/","og_locale":"de_DE","og_type":"article","og_title":"Eingabe in Text- und Kombinationsfelder vereinfachen","og_description":"Manchmal nervt es einfach, Daten in Textfelder einzugeben, aber in vielen F&auml;llen l&auml;sst sich dies nicht &auml;ndern. Wenn das Feld numerische Informationen enth&auml;lt, gibt es aber durchaus M&ouml;glichkeiten: Sie k&ouml;nnen es dann beispielsweise so programmieren, dass der Benutzer den enthaltenen Wert mit den Cursortasten erh&ouml;ht oder vermindert.","og_url":"https:\/\/access-im-unternehmen.de\/Eingabe_in_Text_und_Kombinationsfelder_vereinfachen\/","og_site_name":"Access im Unternehmen","article_published_time":"2021-02-11T21:18:35+00:00","og_image":[{"url":"http:\/\/vg02.met.vgwort.de\/na\/916f08aa4bbb4355aa61516c62300425","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"18\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Eingabe_in_Text_und_Kombinationsfelder_vereinfachen\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Eingabe_in_Text_und_Kombinationsfelder_vereinfachen\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Eingabe in Text- und Kombinationsfelder vereinfachen","datePublished":"2021-02-11T21:18:35+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Eingabe_in_Text_und_Kombinationsfelder_vereinfachen\/"},"wordCount":3563,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Eingabe_in_Text_und_Kombinationsfelder_vereinfachen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg02.met.vgwort.de\/na\/916f08aa4bbb4355aa61516c62300425","articleSection":["2007","6\/2007","Ergonomie und Benutzeroberfl\u00e4che","Mit Formularen arbeiten"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Eingabe_in_Text_und_Kombinationsfelder_vereinfachen\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Eingabe_in_Text_und_Kombinationsfelder_vereinfachen\/","url":"https:\/\/access-im-unternehmen.de\/Eingabe_in_Text_und_Kombinationsfelder_vereinfachen\/","name":"Eingabe in Text- und Kombinationsfelder vereinfachen - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Eingabe_in_Text_und_Kombinationsfelder_vereinfachen\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Eingabe_in_Text_und_Kombinationsfelder_vereinfachen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg02.met.vgwort.de\/na\/916f08aa4bbb4355aa61516c62300425","datePublished":"2021-02-11T21:18:35+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Eingabe_in_Text_und_Kombinationsfelder_vereinfachen\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Eingabe_in_Text_und_Kombinationsfelder_vereinfachen\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Eingabe_in_Text_und_Kombinationsfelder_vereinfachen\/#primaryimage","url":"http:\/\/vg02.met.vgwort.de\/na\/916f08aa4bbb4355aa61516c62300425","contentUrl":"http:\/\/vg02.met.vgwort.de\/na\/916f08aa4bbb4355aa61516c62300425"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Eingabe_in_Text_und_Kombinationsfelder_vereinfachen\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Eingabe in Text- und Kombinationsfelder vereinfachen"}]},{"@type":"WebSite","@id":"https:\/\/access-im-unternehmen.de\/#website","url":"https:\/\/access-im-unternehmen.de\/","name":"Access im Unternehmen","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access","publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/access-im-unternehmen.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/access-im-unternehmen.de\/#organization","name":"Andr\u00e9 Minhorst Verlag","url":"https:\/\/access-im-unternehmen.de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/","url":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","contentUrl":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","width":370,"height":111,"caption":"Andr\u00e9 Minhorst Verlag"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","caption":"Andr\u00e9 Minhorst"}}]}},"_links":{"self":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000516","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/comments?post=55000516"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000516\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000516"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000516"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000516"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}