Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 5/2005.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Zusammenfassung

Erfahren Sie, wie Sie mit Schlüsseln, Indizes, Beziehungen und Validierungen für konsistente Daten sorgen.

Techniken

Tabellen, Indizes, Schlüssel, Beziehungen, Gültigkeitsregeln, Validierung in Formularen

Voraussetzungen

Access 97 oder höher

Beispieldateien

FAQ10_97.mdb, FAQ10_00.mdb

Access-FAQ: Rund um Access

Karl Donaubauer, Wien

In der Access-FAQ von Karl Donaubauer (www.donkarl.com) finden Sie die meistgestellten Fragen und Anworten zum Thema Microsoft Access. In dieser Beitragsreihe stellt Karl Donaubauer die wichtigsten Einträge im Detail vor und zeigt Ihnen entsprechende Lösungen anhand praxisnaher Beispiele. Im zehnten Teil werden Lösungen für die häufigsten Probleme mit dem Tastatur-, Cursor- und Mausverhalten in Formularen vorgestellt sowie Probleme, die beim Aufruf von Berichten aus Formularen auftreten.

Seitenwechsel in Registern

Das Register-Steuerelement ist ein besonderes Wesen. Es hat keinen Steuerelementinhalt und kann keine Tabellendaten aufnehmen, besitzt aber eine Value-Eigenschaft. Es ist ein Container für die anderen Steuerelemente, spielt aber bei einem Bezug auf diese Steuerelemente keine Rolle. Es bietet mit den Seiten (Pages) seine eigenen Steuerelemente, die aber ganz anders funktionieren, und vieles mehr. Diese Besonderheiten bereiten mancherlei Probleme auch in Hinblick auf die Navigation.

Eine häufige Frage ist etwa, wie man per VBA einen Seitenwechsel auslösen kann. Eine Möglichkeit ist, mit SetFocus den Fokus auf ein Steuerelement auf der gewünschten Seite zu setzen. Das bewirkt gleichzeitig einen Seitenwechsel. Ein gezielter Seitenwechsel lässt sich jedoch auch ohne diesen Workaround mit der bereits erwähnten Eigenschaft Value des Register-Steuerelements regeln:

Me!MeinRegister.Value = 1

Dieser Code wechselt zur zweiten Seite des Registers. Die Value-Eigenschaft entspricht der Eigenschaft Seitenindex (PageIndex) der einzelnen Registerseiten. Die erste Seite hat immer den Index 0, die zweite Seite 1 und so weiter. Wie bei den meisten anderen Steuerelementen heißt auch beim Register die Standardeigenschaft Value und kann deshalb weggelassen werden. Für den Wechsel zur zweiten Seite reicht also:

Me!MeinRegister = 1

Ein anderes häufiges Problem ist, wie man bei einem Register-Steuerelement mitbekommt, dass die Seite gewechselt wird, weil man mit Aktionen oder Einstellungen auf den Wechsel zu einer bestimmten Seite reagieren möchte. Für diesen Zweck besitzt das Register das Ereignis Bei Änderung (OnChange). Um die Eigenschaften des Register-Steuerelementes zu sehen, darf nicht eine einzelne Seite, sondern muss das Register komplett markiert sein. Das erreichen Sie in der Entwurfsansicht am besten durch einen Ziehrahmen, der außerhalb des Registers beginnt, oder durch einen Klick auf einen freien Platz neben den Registerzungen. Im Code der Ereignis-Eigenschaft Bei Änderung können Sie dann zum Beispiel ein Select-Case-Konstrukt verwenden, um auf die Seitenwechsel individuell reagieren zu können (s. Quellcode 1).

Quellcode 1: Registerseite wechseln

Private Sub MeinRegister_Change()

    Select Case Me!MeinRegister.Value

        Case 0

            'es wurde zur 1. Seite gewechselt

        Case 1

            'es wurde zur 2. Seite gewechselt

    End Select

End Sub

Oft wird eine längere, zusammengehörende Sequenz von Steuerelementen auf verschiedene Registerseiten verteilt, zum Beispiel um die vielen Textfelder von Personal- oder Fragebögen besser zu gliedern. In diesem Fall ist es für Tastatureingaben bequemer, wenn beim Drücken der Eingabetaste im untersten Steuerelement der Registerseite der Wechsel zum ersten Steuerelement der nächsten Seite ausgelöst wird. Diese Funktionalität können Sie mithilfe des Ereignisses Bei Taste Ab des Textfeldes programmieren.

Abb. 1: Navigation im Register-Steuerelement

Abb. 1 zeigt das Beispiel-Formular frmRegister, in das alle genannten Funktionalitäten eingebaut sind.

Der Ereigniscode Bei Taste Ab des letzten Textfelds auf Seite 2 lautet:

Select Case KeyCode

  Case vbKeyReturn, vbKeyDown, vbKeyTab And (Shift And acShiftMask) = 0

    KeyCode = 0

    Me!Telefon.SetFocus

End Select

Es wird damit geprüft, ob die Eingabetaste, die Cursortaste Nach unten oder die Tabulatortaste ohne heruntergedrückte Umschalttaste betätigt wurde. Falls ja, wird der Tastaturanschlag aufgehoben und der Fokus auf das erste Textfeld, Telefon, der dritten Registerseite gesetzt. Wie schon erwähnt, wird dadurch automatisch ein Seitenwechsel bewirkt.

Komplett ist diese Tastatursteuerung erst mit dem Gegenstück, das heißt, im ersten Steuerelement einer Registerseite sollten die Cursortaste Nach oben oder die Tabulatortaste bei gedrückter Umschalttaste den Wechsel zum letzten Steuerelement der vorherigen Seite bewirken. Im Ereigniscode Bei Taste Ab des Textfeldes Telefon steht daher:

Select Case KeyCode

    Case vbKeyUp, vbKeyTab And _
        (Shift And acShiftMask) = 1

    KeyCode = 0

    Me!Land.SetFocus

End Select

Datensatzwechsel mit
Cursortasten

Von der Datenblattansicht von Tabellen, Abfragen und Formularen oder auch von Excel her sind viele Anwender gewohnt, die Zeile mit den Cursortasten Nach unten und Nach oben wechseln zu können. In einem Endlosformular hingegen muss der Cursor standardmäßig erst alle Steuerelemente des Datensatzes durchlaufen und wechselt erst nach dem letzten Steuerelement zum nächsten Datensatz beziehungsweise zur nächsten Zeile. Der Weg, um das zu ändern, führt über die Programmierung des Tastaturverhaltens auf Formularebene. Zuerst müssen Sie die Eigenschaft Tastenvorschau des Formulars auf Ja setzen, damit die Tastaturereignisse des Formulars Vorrang vor denen der Steuerelemente haben. Im Ereignis Bei Taste Ab des Formulars können Sie dann folgenden Code verwenden:

On Error Resume Next

Select Case KeyCode

    Case vbKeyDown

        KeyCode = 0

        DoCmd.GoToRecord , , acNext

    Case vbKeyUp

        KeyCode = 0

        DoCmd.GoToRecord , , acPrevious

End Select

Beim ersten oder letzten Datensatz würde eine Fehlermeldung erscheinen, weil kein weiterer Datensatzwechsel in die gleiche Richtung mehr möglich ist. Diese erwarteten Fehlermeldungen werden zu Beginn des Codes mit Resume Next übergangen. Danach wird geprüft, ob eine der Cursortasten Nach unten oder Nach oben gedrückt wurde. In beiden Fällen werden die Tastaturwerte ausgelesen und es wird zum nächsten beziehungsweise vorherigen Datensatz gewechselt. Bei jedem Drücken dieser beiden Tasten in allen Steuerelementen wird nun ein Datensatzwechsel ausgelöst und das Endlosformular verhält sich wie ein Datenblatt. Allerdings nur fast.

Falls sich ein Kombinationsfeld im Formular befindet, dessen Auswahlliste gerade aufgeklappt ist, dann findet mit den Cursortasten ebenfalls ein Datensatzwechsel statt. Der Anwender kann also nicht mehr wie gewohnt mit diesen Tasten in der Auswahlliste navigieren. Abb. 2 zeigt dieses Dilemma, beinhaltet aber auch die Lösung. Mit Access-Mitteln gibt es leider keine Möglichkeit zu prüfen, ob die Auswahlliste eines Kombinationsfeldes geöffnet ist oder nicht. Dafür sind relativ umfangreiche API-Codes nötig, die es im Internet zum Beispiel vom bekannten API-Künstler Dev Ashish gibt. Seinen Code habe ich in der Beispiel-Datenbank in das Modul basIsComboOpen eingefügt. Im Formular frmDSWechselCursor ist dann im zuvor beschriebenen Code nur eine zusätzliche Zeile mit dem Aufruf der Funktion nötig, die prüft, ob aktuell ein Kombinationsfeld geöffnet ist:

If fIsComboOpen Then Exit Sub

In diesem Fall wird also schlicht die Prozedur verlassen und die Tastatureingabe nicht geändert, damit der Anwender ganz normal in der geöffneten Liste navigieren kann.

Abb. 2: Kein Datensatzwechsel bei geöffnetem Kombinationsfeld

Datensatzwechsel verhindern

In den bisherigen Fällen ging es darum, die Navigation, vor allem per Tastatur, zu erweitern. Der Gegensatz sind Situationen, in denen die eingebauten Navigationsmöglichkeiten von Access unerwünscht sind und eingeschränkt werden müssen.

Der einfachste Fall ist, den Datensatzwechsel zum vorigen/nächsten Datensatz zu verhindern, wenn im ersten/letzten Steuerelement die Return-, Tabulator- oder eine Pfeiltaste gedrückt wird. Dafür bietet Access die eingebaute Eigenschaft Zyklus, die Sie auf Aktueller Datensatz stellen können.

Nur wenig aufwändiger ist das Unterbinden des Datensatzwechsels mit den Tasten Bild Auf und Bild Ab, die standardmäßig einen Datensatzsprung um eine komplette Formularinnenhöhe bewirken. Um das zu verhindern, müssen Sie wiederum die Eigenschaft Tastenvorschau des Formulars auf Ja setzen. Im Ereignis Bei Taste Ab des Formulars reicht dann eine einzige Codezeile, um die beiden Tasten zu deaktivieren:

Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

Sind Sie Abonnent?Jetzt einloggen ...
 

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Verwandte Beiträge:

Registersteuerelemente von A-Z

Tipps und Tricks

Termine in Berichten darstellen

Berichte manuell füllen

Zugriff auf Daten in Formularen und Steuerelementen

Gruppensummen ohne Gruppen im Berichtsfuß

Daten visualisieren mit HTML

TreeView-Elemente im Griff

Listenfeld und Details in einem Formular

Benutzerdefinierte Formatierung

Modale Dialoge mal anders

Spaltenüberschriften in Berichten

Formulare im Blickpunkt

Steuerelemente zur Laufzeit verschieben

Zugriff auf Formulare

© 2003-2015 André Minhorst Alle Rechte vorbehalten.