Spaltenbreiten optimieren mit Klasse

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.

Spaltenbreiten optimieren mit Klasse

Wenn Sie Daten in der Datenblattansicht von Unterformularen anzeigen, stoßen Sie immer wieder auf das Problem, dass die Spaltenbreiten nicht gleich zu Beginn optimal an die Inhalte der Spalten angepasst werden – also an die Breite der angezeigten Daten. Immerhin kann der Benutzer die Breite in der Regel selbst anpassen. Praktischer aber wäre es, wenn die Spaltenbreiten gleich beim Anzeigen der Daten optimiert würden. Der vorliegende Beitrag zeigt eine kleine Klasse, mit der Sie dies bewerkstelligen können.

Für die Demonstration der in diesem Beitrag vorgestellten Klasse eignet sich am besten ein Unterformular in der Datenblattansicht, das seine Daten nach der Auswahl etwa eines Filters im Hauptformular ändert, wodurch eine erneute Optimierung der Spaltenbreiten erforderlich wird. Dazu legen wir ein Unterformular namens sfmArtikel an, das mit Feldern der Tabelle tblArtikel wie in Bild 1 gefüllt ist und seine Daten in der Datenblattansicht präsentiert.

Vorbereitung für das automatische Anpassen der Spaltenbreiten

Bild 1: Vorbereitung für das automatische Anpassen der Spaltenbreiten

Dieses Formular fügen wir in einem weiteren Formular namens frmArtikeNachKategorie ein, dem wir als Datenherkunft die Tabelle tblKategorien hinzufügen. Das Formular soll die beiden Felder KategorieID und Kategorie anzeigen. Ziehen Sie das Unterformular sfm­Artikel in den Entwurf. Dadurch sollten die beiden Eigenschaften Verknüpfen von und Verknüpfen nach automatisch auf den Wert KategorieID eingestellt werden (s. Bild 2).

Verknüpfung zwischen Haupt- und Unterformular

Bild 2: Verknüpfung zwischen Haupt- und Unterformular

Öffnen Sie das Hauptformular nun in der Formularansicht, kann es sein, dass die Spaltenbreiten entweder viel zu breit oder zu schmal für die anzuzeigenden Inhalte eingestellt sind (s. Bild 3). Dies wollen wir ändern, indem wir die Spaltenbreiten zu jeder Aktualisierung der Datenherkunft des Unterformulars neu anpassen.

Unglückliche Darstellung der Spalten

Bild 3: Unglückliche Darstellung der Spalten

Dazu sind, wenn wir die fertige Klasse, welche diese Aufgabe erledigt, als vorhanden voraussetzen, nur wenige Handgriffe nötig.

Automatische Spaltenoptimierung einbauen

Damit die Spalten automatisch angepasst werden, sind nur drei Schritte nötig:

  • Hinzufügen der Klasse clsColumnWidths
  • Schreiben einiger Zeilen Code ins Klassenmodul des Hauptformulars
  • Hinzufügen des Klassenmoduls zum Unterformular

Klasse nutzen

Nachdem Sie die Klasse clsColumnWidths zum VBA-Projekt der Datenbank hinzugefügt haben, legen Sie eine neue Ereignisprozedur für das Ereignis Beim Laden des Hauptformulars an. Diese füllen Sie wie folgt:

Private Sub Form_Load()
     Set objColumnWidths = New clsColumnWidths
     With objColumnWidths
         Set .DataSheetForm = Me!sfmArtikel.Form
        .OptimizeColumnWidths
     End With
End Sub

Außerdem benötigen Sie noch eine Deklarationszeile für das Objekt objColumnWidths, die Sie im Kopf des Klassenmoduls einfügen:

Dim objColumnWidths As clsColumnWidths

Die Prozedur instanziert zunächst ein Objekt auf Basis der Klasse clsColumnWidths. Danach übergibt sie diesem Objekt über seine Eigenschaft DataSheetForm einen Verweis auf das Unterformular, das mit der Funktion zum automatischen Anpassen der Spaltenbreiten ausgestattet werden soll. Schließlich wird die Methode OptimizeColumnWidths zum Optimieren der Spalten einmalig aufgerufen, damit das Unterformular gleich optimiert wird. Wenn Sie das Formular nun öffnen, ohne den oben genannten dritten Schritt durchzuführen, tut sich nichts – die Spaltenbreiten behalten die vorherigen Einstellungen und werden nicht optimiert.

Sie müssen also unbedingt das Klassenmodul zum Unterformular sfmArtikel hinzufügen – auch wenn Sie gar keine Ereignisprozeduren für das Unterformular benötigen. Dies erledigen Sie, indem Sie die Eigenschaft Enthält Modul des Unterformulars auf den Wert Ja einstellen. Danach sollten die Spaltenbreiten etwa wie in Bild 4 erscheinen.

Spalten mit optimierten Breiten

Bild 4: Spalten mit optimierten Breiten

Das Objekt objColumnWidths haben wir modulweit deklariert, damit es auch nach der Ausführung der Ereignisprozedur Form_Load noch erhalten bleibt. Auf diese Weise wird es nun regelmäßig ausgelöst, wenn der Benutzer den Datensatz im Unterformular wechselt oder das Unterformular gefiltert wird. Dies geschieht beispielsweise auch, wenn Sie den Kategorie-Datensatz im Hauptformular wechseln. Sie können einmal durch die Datensätze scrollen und betrachten, wie die Spaltenbreiten jeweils an die angezeigten Daten angepasst werden.

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

Bitte geben Sie die Zahlenfolge in das nachfolgende Textfeld ein

Die mit einem * markierten Felder sind Pflichtfelder.

Aktuell im Blog
Onlinebanking mit Access

Es ist geschafft: Endlich ist das Buch Onlinebanking mit Access fertiggeschrieben. Das war... [mehr]

Direktzugriff auf Tabellen und Felder

Die IntelliSense-Erweiterung für Tabellen und Felder hat mir soviel Spaß gemacht, dass ich gleich... [mehr]

IntelliSense für Tabellen und Felder

Wenn Sie mit dem VBA-Editor arbeiten und dort gelegentlich SQL-Anweisungen eingeben, müssen Sie... [mehr]

Download Access und SQL Server

Erfahren Sie, welche Schritte zum Download des aktuellen Stands des Buchs "Access und SQL Server"... [mehr]

Bilder in Access 2013

Wer die Bibliothek mdlOGL0710 von Sascha Trowitzsch oder ein ähnliches Modul aus meinen... [mehr]

Dynamische Ribbons

Immer wieder fragen Leser, wie man Ribbon-Elemente wie etwa Schaltflächen in Abhängigkeit... [mehr]

Die Blogmaschine

Einen kleinen Blog zusätzlich zum Shop zu betreiben ist eine tolle Sache. Hier lassen sich... [mehr]

Wegwerfadressen für die Newsletteranmeldung

Die Verwendung von Wegwerf-Adressen für die Nutzung aller möglichen Online-Dienste nimmt... [mehr]

Access und Facebook

Facebook und Access - das ist eine der wenigen Kombinationen, die ich noch nicht in die Mangel... [mehr]

Access und SQL Server - das Projekt

Mein neues Buch Access und SQL Server (gemeinsam mit Bernd Jungbluth) geht in die Endphase. Wer... [mehr]