Home > Artikel > Ausgabe 6/2018 > Datenblatt per VBA: Spalten ein- und ausblenden

Datenblatt per VBA: Spalten ein- und ausblenden

Achtung: Sie sind nicht angemeldet. Wenn Sie Abonnent sind und sich anmelden, lesen Sie den kompletten Artikel, laden das PDF herunter oder probieren die Beispieldatenbank aus (sofern vorhanden).

Für die Datenblattansicht unter Access gibt es eine Menge Einstellungsmöglichkeiten. Diese haben wir ausführlich im Artikel »Datenblattansicht im Griff« in Ausgabe 10/2011 beschrieben. Nun werfen wir einen Blick darauf, wie Sie diese Einstellungen per VBA einlesen und einstellen und welche Nutzungsmöglichkeiten sich daraus ergeben – zum Beispiel das einfache Ein- und Ausblenden der Spalten des Datenblatts.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1806_DatenblattPerVBA.accdb.

Vorbereitung

Wir verwenden eine Beispieldatenbank mit den Tabellen der Suedsturm-Datenbank und dort speziell mit den Tabellen tblArtikel, tblKategorien und tblLieferanten.

Wir stellen ein Unterformular namens sfmArtikel, das wir über die Eigenschaft Datensatzquelle an die Tabelle tblArtikel binden. Danach ziehen wir alle Felder dieser Tabelle in den Detailbereich des Entwurfs des neuen Formulars. Nach dem Einstellen der Eigenschaft Standardansicht auf Datenblatt speichern und schließen wir das Formular.

Nun erstellen wir das Hauptformular für dieses Formular und speichern es unter dem Namen frmArtikel. Das Formular sfmArtikel ziehen wir aus dem Navigationsbereich in den Entwurf des Hauptformulars, sodass dieses im Entwurf nun wie in Bild 1 aussieht.

Entwurf der Datenblattansicht

Bild 1: Entwurf der Datenblattansicht

Außerdem stellen wir für das Hauptformular die Eigenschaften Datensatzmarkierer, Navigationsschaltflächen und Bildlaufleisten jeweils auf Nein ein und Automatisch zentrieren auf Ja. Schließlich soll das Unterformular sich mit dem Hauptformular vergrößern lassen, daher legen wir für die Eigenschaften Horizontalter Anker und Vertikaler Anker jeweils den Wert Beide fest.

Nach dem Wechsel in die Formularansicht des Hauptformulars erwartet uns dann die Ansicht aus Bild 2.

Datenblatt in der Formularansicht

Bild 2: Datenblatt in der Formularansicht

Spalten ein- und ausblenden per Benutzeroberfläche

Wie können wir nun per VBA eine Spalte ein- oder ausblenden? Über die Benutzeroberfläche geht das ganz einfach: Dort klicken wir mit der rechten Maustaste auf die entsprechende Spaltenüberschrift und wählen den Eintrag Felder ausblenden aus dem Kontextmenü aus (siehe Bild 3).

Feld ausblenden per Kontextmenü

Bild 3: Feld ausblenden per Kontextmenü

Spalten ein- und ausblenden per VBA

Und wie bekommen wir das per VBA hin? Wir können es ja einfach mal über das Direktfenster probieren, indem wir dort entsprechende Eigenschaften ändern. Um zu prüfen, ob wir etwa die Spalte Artikelname korrekt referenzieren, wollen wir einmal den Inhalt des aktuellen Feldes ausgeben, was auch gelingt:

Debug.Print Forms!frmArtikel!sfmArtikel.Form!Artikelname

Chai

Können wir so auch etwa die Breite des Feldes einstellen? Die Breite können wir zumindest ausgeben:

Debug.Print Forms!frmArtikel!sfmArtikel. Form!Artikelname.width

1701

Lässt sie sich so auch ändern? Der folgende Befehl, der die Spaltenbreite verdoppel sollte, zeigt jedenfalls keine Wirkung:

Forms!frmArtikel!sfmArtikel.Form!Artikelname.Width = 3400

Damit gehen wir dann zum Ein- und Ausblenden über – funktioniert das wenigstens? Dazu nutzen wir die Visible-Eigenschaft, erst einmal zum Auslesen des aktuellen Wertes:

Debug.Print Forms!frmArtikel!sfmArtikel. Form!Artikelname.Visible

Wahr

Dann versuchen wir, die Spalte mit der folgenden Anweisung auszublenden:

Forms!frmArtikel!sfmArtikel.Form!Artikelname.Visible = False

Das liefert immerhin einmal eine Reaktion – wenn auch nur in Form einer Fehlermeldung (siehe Bild 4). Wir können das Feld natürlich nicht ausblenden, wenn dieses den Fokus hat. Also verschieben wir diesen auf ein anderes Feld, zum Beispiel Artikel­ID, und führen den Befehl erneut aus. Und es geschieht wieder nichts! Offensichtlich kommen wir an die Spalten nicht über den Verweis auf die dahinterliegenden Steuer­elemente heran.

Fehler beim Zugriff auf die Visible-Eigenschaft eines aktiven Steuerelements

Bild 4: Fehler beim Zugriff auf die Visible-Eigenschaft eines aktiven Steuerelements

Eigenschaften für Datenblattspalten

Da stellt sich doch die Frage, ob die für Steuer­elemente in der Formularansicht gültigen Eigenschaften überhaupt in der Datenblattansicht wirken. Also durchsuchen wir einmal den Objektkatalog etwa nach den Eigenschaften für das Textfeld-Steuerelement. Und hier werden wir dann auch schnell fündig: Mit ColumnHidden, ColumnOrder und ColumnWidth finden wir Eigenschaften, die sich direkt auf Spalten beziehen (siehe Bild 5).

Einstellungen für Datenblattspalten

Bild 5: Einstellungen für Datenblattspalten

Die Eigenschaft ColumnHidden für die Spalte Artikelname sollte also zum Beispiel den Wert Falsch ausgeben, was auch geschieht:

Forms!frmArtikel!sfmArtikel.Form!Artikelname. ColumnHidden

Falsch

Nun wollen wir die Spalte einmal ausblenden. Dazu verwenden wir diesen Befehl:

Forms!frmArtikel!sfmArtikel.Form!Artikelname. ColumnHidden = True

Und es gelingt – die Spalte ist nicht mehr zu sehen (siehe Bild 6). Auf die gleiche Weise können wir die Spalte auch wieder einblenden, dazu brauchen wir die Eigenschaft ColumnHidden nur wieder auf False einzustellen.

Ausblendete Spalte

Bild 6: Ausblendete Spalte

Komfortables Ein- und Ausblenden

Wie können wir dem Benutzer das Ein- und Ausblenden der Spalten noch komfortabler machen? Dazu wollen wir diesem ein Listenfeld mit einer Liste der Spalten bereitstellen, in dem die aktuell sichtbaren Spalten markiert sind und die nicht sichtbaren nicht. Genau genommen ist das auch eine schöne Fingerübung, um das Listenfeld einmal genauer kennenzulernen.

Listenfeld mit ein- und ausgeblendeten Spalten

Also fügen wir dem Hauptformular im oberen Teil ein Listenfeld hinzu, welches die Steuer­elemente im Unterformular auflistet. Das Listenfeld soll lstSpalten heißen und für die Eigenschaft Herkunftstyp den Wert Wertliste aufweisen.

Im Entwurf sieht das Formular nun wie in Bild 7 aus. Nun wollen wir das Listenfeld noch füllen. Das erledigen wir, wenn das Formular geöffnet wird, also in der Ereignisprozedur, die durch das Ereignis Beim Laden des Formulars ausgelöst wird. Diese erhält den folgenden Code:

Listenfeld zum Ein- und Ausblenden der Spalten

Bild 7: Listenfeld zum Ein- und Ausblenden der Spalten

Private Sub Form_Load()

Dim sfm As Form

Dim ctl As Control

Dim strControlSource As String

Dim strSpalten As String

Set sfm = Me!sfmArtikel.Form

For Each ctl In sfm.Controls

strControlSource = ""

On Error Resume Next

strControlSource = ctl.ControlSource

On Error GoTo 0

Sie haben das Ende des frei verfügbaren Teil dieses Artikels erreicht!

Wenn Sie mehr lesen und auf viele weitere Artikel zugreifen möchten, melden Sie sich als Abonnent unter Login an. Falls nicht, bestellen Sie doch einfach ein Jahresabonnement!