Steuerelemente an Datenblatt anpassen

Wenn Sie ein Abonnement des Magazins 'Access im Unternehmen' besitzen, können Sie sich anmelden und den kompletten Artikel lesen.
Anderenfalls können Sie das Abonnement hier im Shop erwerben.

Steuerelemente an Datenblatt anpassen

Datenblätter sind sehr flexibel, wenn es um die Anzeige tabellarischer Daten geht. Sie können die Daten damit sortieren und filtern und die Breite und Sortierung der Spalten anpassen. Gelegentlich platziert man jedoch um ein Unterformular mit einem Datenblatt herum noch weitere Elemente wie etwa Schaltflächen oder individuelle Steuerelemente etwa zur Eingabe von Suchbegriffen. Diese sollen sich, wenn der Benutzer die Spalten ändert, natürlich anpassen. Wie dies gelingt, zeigt der vorliegende Beitrag.

Ein Anwendungsfall für das Anpassen von Steuerelementen an die Spalten eines Datenblatts ist das Formular aus dem Beitrag Textdateien vergleichen (www.access-im-unternehmen.de/922). Dieses zeigt in jeweils drei Spalten im Datenblatt des Unterformulars die Zeilennummer, ein Kontrollkästchen und den Zeileninhalt der Zeilen einer Datei an (s. Bild 1). Der Benutzer wird hier gelegentlich die Breite der beiden Spalten Datei 1 und Datei 2 verändern, um den kompletten Inhalt einer Zeile lesen zu können.

Beispiel für Steuerelemente, die sich auf die Spalten eines Datenblatts im Unterformular beziehen

Bild 1: Beispiel für Steuerelemente, die sich auf die Spalten eines Datenblatts im Unterformular beziehen

Wir können der Abbildung schon die Vorgaben entnehmen, die wir programmieren müssen: Die Textfelder zur Eingabe des Dateinamens sollen linksbündig mit den Spalten zur Anzeige der Zeilenzahl abschließen. Die Schaltflächen sollen rechtsbündig mit der Spalte zur Anzeige der Zeileninhalte abschließen. Die Schaltflächen haben eine feste Breite. Die Breite der Textfelder zur Eingabe der Dateinamen orientiert sich an der Gesamtbreite der drei Spalten minus der Breite der Schaltfläche zur Auswahl der Textdatei.

Bild 2 zeigt, wie das Formular nach dem Vergrößern etwa der Spalten zur Anzeige der Spalteninhalte aussieht. Wie man sieht, ist eine dynamische Anpassung der darüber angeordneten Steuerelemente aus optischen Gründen dringend erforderlich. Was ist zu tun? Wir müssen erstens ein Ereignis identifizieren, das durch das Ändern der Spaltenbreiten ausgelöst wird. Zweitens müssen wir die Breiten ermitteln und definieren, wie die Breite der Steuerelemente im Hauptformular in Abhängigkeit davon eingestellt wird. Drittens – und das ist sehr wichtig – müssen wir in diesem Fall verhindern, dass der Benutzer die Reihenfolge der Spalten ändert. Das würde unsere Regeln für die Einstellung der Breite der Steuerelemente im Hauptformular empfindlich stören. In anderen Anwendungsfällen, wo etwa jeweils ein Steuerelemente im Hauptformular einer Spalte im Unterformular zugeordnet ist, sieht das anders aus – hier erhält einfach jedes Steuerelement die Position und die Breite der jeweils zugeordneten Spalte im Datenblatt des Unterformulars.

Nach dem Ändern der Spaltenbreiten befinden sich die Steuerelemente im Hauptformular nicht mehr exakt über den Spalten.

Bild 2: Nach dem Ändern der Spaltenbreiten befinden sich die Steuerelemente im Hauptformular nicht mehr exakt über den Spalten.

Ereignis identifizieren

Als Erstes wollen wir herausfinden, über welches Ereignis wir überhaupt auf Änderungen der Position oder Breite der Spalten reagieren können. Dazu betrachten wir zunächst die Liste der Ereigniseigenschaften des Unterformulars. Wie ändert der Benutzer überhaupt die Breite oder Position von Spalten im Datenblatt? Dies ist nur mit der Maus möglich: Zum Ändern der Reihenfolge der Spalten klickt der Benutzer zunächst den Spaltenkopf der zu verschiebenden Spalte an und zieht diesen dann bei gedrückter Maustaste an die gewünschte Position. Ähnlich sieht es beim Anpassen der Spaltenbreiten aus: Hier drückt der Benutzer die Maustaste herunter, wenn sich der Mauszeiger über einem der Zwischenräume zwischen zwei Spaltenköpfen befindet und zieht den Zwischenraum an die gewünschte Position. Eine weitere Möglichkeit ist ein Doppelklick auf den Zwischenraum zwischen zwei Spaltenköpfen, um die optimale Breite der Spalte entsprechend den Inhalten einzustellen.

Die Mausbewegungen und Mausklicks lösen grundsätzlich die Ereignisse Bei Mausbewegung, Bei Maustaste ab und Bei Maustaste auf aus. Aber es gibt einige dieser Ereignisse in einem Formular: für das Formular selbst, für die einzelnen Bereiche und auch für jedes einzelne Steuerelement.

Um herauszufinden, ob die Ereignisse eines dieser Bereiche für uns hilfreich sind, müssen wir experimentieren. Dazu legen wir einfach entsprechende Ereignisprozeduren an und schauen, welches Ereignis wann ausgelöst wird.

Welche Kandidaten wollen wir untersuchen? Wir nehmen uns die drei Ereignisse des Formulars selbst, des Detailbereichs (da keine anderen Bereiche für das Unterformular definiert wurden) und, als Beispiel für eines der Steuerelemente, das Textfeld Datei1.

Die Programmierung der Ereignisprozeduren finden Sie in Listing 1.

Private Sub Datei1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
     Debug.Print "Datei1_MouseDown"
End Sub
Private Sub Datei1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
     Debug.Print "Datei1_MouseMove"
End Sub
Private Sub Datei1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
     Debug.Print "Datei1_MouseUp"
End Sub
Private Sub Detailbereich_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
     Debug.Print "Detailbereich_MouseDown"
End Sub
Private Sub Detailbereich_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
     Debug.Print "Detailbereich_MouseMove"
End Sub
Private Sub Detailbereich_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
     Debug.Print "Detailbereich_MouseUp"
End Sub
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
     Debug.Print "Form_MouseDown"
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
     Debug.Print "Form_MouseMove"
End Sub
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
     Debug.Print "Form_MouseUp"
End Sub

Listing 1: Prozeduren zum Ermitteln des Ereignisses zum Abfangen von Spaltenänderungen

Nun prüfen wir, welches Mausbewegung welches Ereignis auslöst. Dazu positionieren Sie das Access-Fenster mit dem zu untersuchenden Formular und das VBA-Fenster nebeneinander. Wenn Sie dann mit der Maus über die Spaltenköpfe des Unterformulars fahren, sollte sich etwas im Direktbereich des VBA-Editors tun. Wenn Sie nun noch beispielsweise die Breite einer Spalte durch Anklicken und Ziehen des Zwischenraums zwischen den Spaltenköpfen ändern, sollte das Ergebnis im Direktfenster etwa wie in Bild 3 aussehen. Bingo – wir benötigen die Ereignisse Bei Maustaste ab, Bei Mausbewegung und Bei Maustaste auf, um das Ändern der Spaltenbreiten zu ermitteln.

Ereignisse im Direktbereich des VBA-Editors

Bild 3: Ereignisse im Direktbereich des VBA-Editors

Wann sollen die Steuerelemente angepasst werden?

Dies war die Leseprobe dieses Artikels.
Melden Sie sich an, um auf den vollständigen Artikel zuzugreifen.

Bitte geben Sie die Zeichenfolge in das nachfolgende Textfeld ein

Die mit einem * markierten Felder sind Pflichtfelder.

Ich habe die Datenschutzbestimmungen zur Kenntnis genommen.