aldebaran Hannover
Softwareentwicklung & IT-Lösungen Hannover

aldebaran Knowhow

Access-Formulare mit flexibler Spaltenzahl

Manchmal benötigt man in Access Formulare oder Berichte mit einer flexiblen Anzahl Spalten, z.B. für kreuztabellenartige Auswertungen. Die Access-Kreuztabellenformulare selbst sind kaum anpassbar. Wir haben eine Mechanik entwickelt, mit der man aus Formular- bzw. Berichtsvorlagen zur Laufzeit Formulare und Berichte mit einer beliebigen Anzahl Spalten erstellen kann.

Projektauswertung Access Spalten flexibel
Formular mit einer dem Auswertungszeitraum angepassten Anzahl von Monatsspalten

Beispiel:

Eine Anwendung soll verschiedene Zahlen zu Projekten zusammenstellen. Der Zeitraum (hier Juli bis Dezember 04) kann unterschiedlich viele Monate umfassen. Das Formular soll die richtige Anzahl Monatsspalten erzeugen. Links und rechts von dem Bereich der Monatsspalten befinden sich normale Formularfelder.

Realisierung

Die Funktionalitäten befinden sich in einer Klasse namens clsMultipeColumnFR. Sie ermöglicht es, aus Schablonen von Formularen oder Berichten zur Laufzeit Inkarnationen mit variablen Spalten-Anzahlen zu erzeugen.
Wenn Formular oder Bericht zu breit werden, werden alle Steuerelemente verkleinert.
Das Schablonenformular / der Schablonenbericht enthält genau eine Spalte als Vorlage für die x zu erstellenden Spalten sowie beliebige Elemente, die nicht vervielfacht werden sollen.
Im Template-Objekt ist dabei das Feld "Marke" (Tag) der Steuerelemente wichtig. Es muss mit bestimmten Werten belegt werden:

  • Alle Steuerelemente, die in jeder Spalte auftauchen sollen, müssen die Zeichenfolge MCFCOLUMN enthalten.
  • Alle Steuerelemente, die ganz rechts erscheinen sollen, die also bei der Spaltenerzeugung entsprechend nach rechts verschoben werden müssen, müssen die Zeichenfolge MCFRIGHT enthalten.
  • Alle Steuerelemente, die breiter werden sollen, wenn Spalten eingefügt werden (z.B. horizontale Linien), müssen die Zeichenfolge MCFSTRETCH enthalten.

Hier ein Benutzungs-Beispiel:

Dim mcf As clsMultipeColumnFR, form_name as String
Set mcf = New clsMultipeColumnFR
form_name = mcf.create _
   (False, "frmPlatzierungsvergleichTemplate", 8)
' hier das Formular mit Daten füllen, siehe unten
DoCmd.OpenForm form_name

Argument 1 von create ist false für Formulare oder true für Berichte.
Argument 2 gibt den Namen des Template-Objektes an.
Argument 3 ist die Spaltenanzahl.

Danach kann man mit der Funktion mcf.ControlName() den Namen von Steuerelementen für einen gegebenen Original-Namen und eine bestimmte Spalte abfragen, um die Controls mit Daten zu füllen. Beispiel: Der Recordset rs enthält Projektdaten (Saldo, PT) für n Monate, aufsteigend nach Monat sortiert.

[...]
ixCol = 1
While Not rs.EOF
     'Label:
     Set ctl = ctls(mcf.ControlName("lblMonat", ixCol))
     ctl.Caption = Format(rs!MonatJahr, "yy-mm")

'Zahlenfelder:
     Set ctl = ctls(mcf.ControlName("Saldo", ixCol))
     ctl.value = rs!Saldo
     Set ctl = ctls(mcf.ControlName("PT", ixCol))
     ctl.value = rs!PT

     ixCol = ixCol + 1
     rs.MoveNext
  Wend

Download: Klasse clsMultipeColumnFR

Die Klasse clsMultipeColumnFR bieten wir Ihnen als Textdatei in einem Zip-Archiv zum Download an: clsMultipeColumnFR.zip

zum Seitenanfang
Google