Selektion im Datenblatt

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

Im Listenfeld kann man mit den Einstellungen Mehrfach oder Erweitert auch leicht mehrere Datensätze auswählen. Was aber ist, wenn man diese Funktion in der Datenblattansicht bereitstellen will Klar, anklicken kann man die einzelnen Datensätze, man kann auch mehrere zusammenhängende Datensätze markieren – aber was ist, wenn Sie beispielsweise den ersten, dritten und fünften Datensatz in der Datenblattansicht markieren wollen Dann hilft nur ein spezieller Trick, den wir in diesem Artikel vorstellen.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1703_SelektionImDatenblatt.accdb.

Datenselektion speichern

Wenn Sie die Daten einer Tabelle in der Datenblattansicht anzeigen, gibt es verschiedene Möglichkeiten, einen oder mehrere Datensätze zu markieren. Die erste Variante ist die Markierung eines einzelnen Datensatzes (siehe links in Bild 1). Hier klicken Sie einfach für den gewünschten Datensatz auf den grauen Bereich links im Datenblatt, also auf den sogenannten Datensatzmarkierer.

Beispiele für die Selektion von Datensätzen im Datenblatt

Bild 1: Beispiele für die Selektion von Datensätzen im Datenblatt

Die zweite Variante ist, mehrere zusammenhängende Datensätze zu markieren. Dazu markieren Sie zuerst den obersten Datensatz, halten dann die Umschalttaste gedrückt und markieren dann den unteren Datensatz. Das Ergebnis sehen Sie rechts im Bild.

Selektion abfragen

Um den oder die ausgewählten Datensätze abfragen zu können, fügen wir das Formular, das die Daten unserer Beispieltabelle in der Datenblattansicht anzeigt, als Unterformular in ein weiteres Formular ein. Im neuen Hauptformular legen wir dann ein paar Schaltflächen an, mit denen wir die selektierten Datensätze auslesen können (siehe Bild 2). Um einen einzelnen aktuell markierten Datensatz auszulesen, hinterlegen wir die folgende Prozedur für die Ereigniseigenschaft Beim Klicken der Schaltfläche cmdSelektionAusgebenEinzeln:

Formular zum Auswerten der aktuellen Selektion

Bild 2: Formular zum Auswerten der aktuellen Selektion

Private Sub cmdSelektionAusgebenEinzeln_Click()
    Dim sfm As Form
    Set sfm = Me!frmKundenSelektieren.Form
    MsgBox "Selektierte Kunden-ID: " & sfm!KundeID
End Sub

Wenn Sie nun bei gedrückter Umschalttaste mehr als einen Eintrag auswählen, liefert das Meldungsfenster die ID des zuerst ausgewählten Kunden. Wenn Sie also zuerst den Eintrag mit dem Wert 7 im Feld Kunde-ID wählen und dann bei gedrückter Umschalttaste den Kunden mit der ID 3 anklicken, zeigt die Meldung den Wert 7 an.

Nun fügen wir eine zweite Schaltfläche hinzu, welche alle markierten Datensätze liefern soll. Hier gibt es nur ein Problem: Wenn wir in der Datenblattansicht einen oder mehrere Datensätze markierten und dann auf eine Schaltfläche klicken, wird die Markierung wieder gelöscht. Wir müssen also die Informationen zur Markierung speichern, bevor wir diese ausgeben. Dazu eignet sich, so dachten wir, am besten eine der Ereignisprozeduren, die beim Selektieren der Einträge im Datenblatt ausgelöst werden.

Allerdings stellte sich heraus, dass es keine einfache Methode gab, auf das Selektieren eines Bereichs von Datensätzen zu reagieren. Was nun Ein Ereignis, dass vor dem Anklicken der Schaltlfäche, aber nach dem Selektieren der Datensätze ausgelöst wird, ist das Beim Verlassen-Ereignis des Unterformular-Steuerelements. Und das trifft sich besonders gut, denn das Unterformular-Steuerelement ist ja ein Steuerelement des Hauptformulars, was bedeutet, dass wir das Ereignis auch gleich im Klassenmodul des Hauptformulars implementieren können.

Anderenfalls hätten wir ein Ereignis des Unterformulars verwenden müssen, was aus folgendem Grund ungünstig ist: Wir wollen ja die aktuelle Selektion des Unterformulars erfassen und möglichst gleich in entsprechenden Variablen im Hauptformular speichern, wo wir dann per Klick auf die Schaltlfäche etwas mit dem markierten Datensätzen erledigen. Mit einem Ereignis im Unterformular hätten wir die gesuchten Werte, welche die Selektion repräsentieren, erst noch irgendwie in das Hauptformular bekommen müssen. Das können wir uns nun sparen.

Welche Eigenschaften benötigen wir, um die Selektion auszuwerten Dabei handelt es sich um die beiden Eigenschaften SelTop und SelLength. Langjährige Leser kennen diese beiden Eigenschaften vermutlich schon vom Textfeld-Steuerelement – dort wurde mit ähnlichen Eigenschaften (SelStart und SelLength) der markierte Text ermittelt. Im Falle der Datenblattansicht liefert SelTop den Index der obersten markierten Spalte und SelLength liefert die Anzahl der selektierten Zeilen. Um diese beiden Werte im Klassenmodul des Hauptformulars speichern zu können, legen wir die folgenden beiden Variablen im Kopf des Moduls an:

Dim intSelHeight As Integer
Dim intSelTop As Integer

Damit diese beim Verlassen des Unterformular-Steuerelements gefüllt werden, legen wir für das Ereignis Bei Verlassen dieses Elements die folgende Ereignisprozedur an:

Private Sub frmKundenSelektieren_Exit(Cancel As                                                 Integer)
    intSelHeight = Me!frmKundenSelektieren.Form.SelHeight
    intSelTop = Me!frmKundenSelektieren.Form.SelTop
End Sub

Wenn wir nun auf die Schaltfläche cmdSelektionAusgebenAlle klicken, wollen wir die folgende Ereignisprozedur auslösen:

Private Sub cmdSelektionAusgebenAlle_Click()
    MsgBox "Erste markierte Zeile: " & intSelTop _
        & vbCrLf _
        & "Anzahl markierter Zeilen: " & intSelHeight
End Sub

Diese gibt dann einfach die Werte der beiden Variablen intSelTop und intSelHeight per Meldungsfenster aus.

Von der Position zum Datensatz

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

Testzugang

eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar