Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 2/2003.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Listenfeldbeschriftung per Assistent

André Minhorst, Duisburg

Die Beschriftung von Listenfeldern ist erforderlich, sobald die Anzahl der angezeigten Felder größer als eins ist. Um ein solches Feld zu beschriften, gibt es zwei Möglichkeiten: Entweder Sie verwenden die eingebaute Funktion zur Anzeige von Überschriften oder Sie legen selbst Hand an und erstellen entsprechende Bezeichnungsfelder oberhalb des Listenfeldes. In welchen Fällen dies erforderlich ist und wie Sie sich die Arbeit auf Dauer durch Verwendung eines Assistenten wesentlich vereinfachen können, zeigt Ihnen der vorliegende Beitrag.

Listenfeldbeschriftungen

Die Beschriftung eines Listenfeldes kann auf zwei Arten erfolgen. Das Listenfeld selbst enthält die Eigenschaft Spaltenüberschriften. Wenn Sie ihren Wert auf Ja setzen, fügt Access dem Listenfeld eine Zeile mit Überschriften hinzu (s. Abb. 1). Dabei verwendet Access die Feldnamen bzw. eventuell vorhandene Alias-Namen aus der Datensatzherkunft des Listenfeldes.

Abb. 1: Listenfeld mit eingebauten Überschriften

Die zweite Möglichkeit ist die Platzierung eigener Überschriften oberhalb des Listenfeldes (s. Abb. 2). Die Methode ist z. B. sinnvoll, wenn die Formatierung der Überschriften des Listenfeldes dem Design der übrigen Steuerelemente entsprechen soll.

Wenn Sie schon einmal Formulare mit vielen Steuerelementen optisch aufbereitet haben, wissen Sie, dass dies eine recht mühselige Arbeit sein kann. Die manuelle Beschriftung von Listenfeldern ist da keine Ausnahme, ganz im Gegenteil: Die Überschriften müssen genau an die in der Eigenschaft Spaltenbreiten angegebenen Maße angepasst werden. Und ob Sie nun die entsprechenden Maße für die Eigenschaften Links und Breite der einzelnen Bezeichnungsfelder eintragen oder die Bezeichnungsfelder nach Augenmaß positionieren: spätestens nach dem Hinzufügen einer Spalte zum Listenfeld ist die ganze Arbeit für die Katz.

Abb. 2: Listenfeld mit manuell erstellten Überschriften

Wesentlich angenehmer wäre die Aufgabe, wenn sie mit wenigen Knopfdrücken zu erledigen wäre. Und da Sie im Beitrag Assistenten und Add-Ins mit Access in der vorliegenden Ausgabe von Access im Unternehmen ohnehin nachlesen können, wie Sie einen Assistenten in Access integrieren, erstellen Sie sich einen eigenen Assistenten zum Beschriften von Listenfeldern.

Hinweis

Den fertigen Listenfeldbeschrifter finden Sie auf der Heft-CD unter den Dateinamen Listenfeldbeschrifter97.mda und Listenfeldbeschrifter2000.mda. (

Anforderungen an den
Assistenten

Wenn Sie einen Assistenten selbst programmieren, können Sie auch selbst seinen Funktionsumfang bestimmen. Das ist der große Vorteil gegenüber fertigen Assistenten und Add-Ins, die entweder so viele Funktionen haben, dass Sie den Überblick verlieren, oder die entscheidenden Funktionen vermissen lassen.

Genauso ist es beim Funktionsumfang des Assistenten, der im Rahmen des vorliegenden Beitrags vorgestellt wird: Er wird möglicherweise nicht hundertprozentig Ihren Wünschen entsprechen, aber Sie können ja ohne weiteres Funktionen hinzufügen oder überflüssige entfernen.

Die als Beispieldatenbank auf der Heft-CD befindliche Add-In-Datenbank enthält die folgenden Funktionen:

  • Auswahl des gewünschten Formulars und Listenfeldes
  • Auswahl von Schriftgröße, -farbe, -format
  • Abb. 3: Benutzeroberfläche des Listenfeldbeschrifter-Dialogs

  • Auswahl von Hintergrundfarbe und -art
  • Auswahl der Rahmenfarbe und -art
  • wahlweise Übernahme oder Anpassung des Feldnamens, der als Überschrift dienen soll
  • automatische Überprüfung, ob die Zeichenkette zu lang für die Spaltenbreite ist
  • Funktionsweise des
    Assistenten

    Der hier vorgestellte Assistent besteht im Wesentlichen aus einem Formular, das als Dialog zur Einstellung der gewünschten Eigenschaften der Listenfeldbeschriftungen dient (s. Abb. 3). Sie können den Assistenten nach der Fertigstellung und Registrierung über den Eintrag Extras/Add-Ins/Listenfeldbeschrifter aktivieren.

    Der obere Bereich des Assistenten enthält eine Beispielbeschriftung zur Vorschau auf die aktuellen Einstellungen. Die beiden Kombinationsfelder dienen zur Auswahl des Formulars und des Listenfeldes. Alle anderen Steuerelemente dienen zur Einstellung der verschiedenen Eigenschaften.

    Dabei verwendet der Assistent - soweit möglich - vom System zur Verfügung gestellte Dialogfenster. Das ist bei der Auswahl der Schriftart und bei der Rahmen- und der Hintergrundfarbe der Fall.

    Nach dem Festlegen der Einstellungen und einem Mausklick auf die Schaltfläche Fertig stellen erfolgt die Erstellung der Bezeichnungsfelder. Der Assistent verwendet die Namen oder - falls vorhanden - die Alias-Namen der Felder der Datensatzherkunft des Listenfeldes.

    Der Assistent zeigt für jede Überschrift eine Inputbox zur Übernahme oder zur Anpassung der Überschrift an. Nach der Übernahme der Überschrift überprüft der Assistent, ob die Breite des zu erstellenden Bezeichnungsfeldes größer als die Breite der entsprechenden Spalte des Listenfeldes ist, und fragt ggf. nach einer kürzeren Überschrift.

    Programmierung des
    Assistenten

    In den folgenden Abschnitten erfahren Sie, wie Sie das Formular mit den Steuerelementen zur Festlegung der Eigenschaften der Listenfeldbeschriftungen erstellen und welche Funktionalität sich dahinter verbirgt.

    Hinweis

    Der Quellcode ist aufgrund seines Umfangs teilweise verkürzt dargestellt. Die ungekürzte Version des Quellcodes finden Sie in den entsprechenden Datenbanken auf der beiliegenden Heft-CD. (

    Das Formular
    frmListenfeldbeschrifter

    Neben einigen VBA-Modulen ist das Formular frmListenfeldbeschrifter das einzige Objekt der Datenbank (s. Abb. 4).

    Abb. 4: Das Formular frmListenfeldBeschriften in der Entwurfsansicht

    Anzeige einer Beispielbeschriftung

    Das Bezeichnungsfeld lblBeschriftung bietet dem Anwender eine Vorschau einer Überschrift mit den aktuellen Einstellungen.

    Auswahl des Formulars

    Das Kombinationsfeld cboFormular soll alle Formulare der Datenbank anzeigen, die den Assistenten aufruft.

    Normalerweise können Sie als Datenherkunft des Kombinationsfeldes einfach eine auf der Tabelle MSysObjects basierende Abfrage verwenden. Die Tabelle MSysObjects enthält alle Objekte einer Access-Datenbank. Wenn das Feld Type dieser Tabelle den Wert -32768 hat, handelt es sich bei dem Objekt um ein Formular.

    Hier ruft allerdings eine Datenbank (die Datenbank mit dem anzupassenden Listenfeld) eine Funktion einer anderen Datenbank (der Add-In-Datenbank) auf. Wenn im Klassenmodul des Formulars frmListenfeldbeschrifter der Add-In-Datenbank nun eine auf einer Systemtabelle basierende Abfrage ausgeführt wird, bezieht sich diese Abfrage logischerweise auf die Tabelle MSysObjects der Add-In-Datenbank.

    Das können Sie umgehen, indem Sie das Kombinationsfeld per Code füllen. Dazu stellen Sie zunächst die Eigenschaft Herkunftstyp auf Wertliste ein. Den Rest übernimmt die Prozedur aus Quellcode 1, die beim Öffnen des Formulars frmListenfeldbeschriftung aufgerufen wird.

    Interessant ist in diesem Fall der erste Teil bis zur Zuweisung der Wertliste an die Eigenschaft RowSource des Kombinationsfeldes. Die Prozedur verwendet die CurrentDB-Funktion, um die aktuell im Datenbankfenster angezeigte Datenbank zu ermitteln, und füllt anschließend das Recordset rst mit den Namen aller Formulare dieser Datenbank. In einer Do While-Schleife durchläuft die Prozedur alle Einträge und setzt einen String zusammen, der eine Liste der durch Semikola getrennten Formularnamen der Datenbank enthält.

    Praxis-Tipp

    Wenn Sie per Code auf eine Tabelle der Add-In-Datenbank verweisen möchten, können Sie dies über die Funktion CodeDB erledigen, die bis auf die Zieldatenbank mit CurrentDB identisch ist. (

    Private Sub Form_Open(Cancel As Integer)

        Dim db As Database

        Dim rst As Recordset

        Dim strRowsource As String

        Set db = CurrentDb

        Set rst = db.OpenRecordset("SELECT Name FROM " _
            "MSysObjects WHERE Type=-32768", dbOpenDynaset)

        Do While Not rst.EOF

            strRowsource = strRowsource & rst!Name & ";"

            rst.MoveNext

        Loop

        Me.cboFormular.RowSource = Left(strRowsource, _
            Len(strRowsource) - 1)

        Me.cboRahmenbreite = Me.cboRahmenbreite.ItemData(0)

        Me.cboSpezialeffekt = _
            Me.cboSpezialeffekt.ItemData(0)

    End Sub

    Quellcode 1

    Private Sub cboFormular_AfterUpdate()

        Dim Formular As Form

        Dim Steuerelement As Control

        Dim strListenfelder As String

        If Not IstFormularGeoeffnet(Me.cboFormular) Then

            If MsgBox("Das Formular wird jetzt in der " _
                "Entwurfsansicht geöffnet.", vbOKCancel _
                    + vbExclamation, _

                    "Listenfeldbeschrifter") = vbOK Then

                DoCmd.OpenForm Me.cboFormular, acDesign

            End If

        End If

        Set Formular = Forms(Me.cboFormular)

        For Each Steuerelement In Formular.Controls

            If Steuerelement.ControlType = acListBox Then

                strListenfelder = strListenfelder & ";" _
                    & Steuerelement.Name

            End If

        Next Steuerelement

        If Len(strListenfelder) > 0 Then

            strListenfelder = Mid(strListenfelder, 2, _
                Len(strListenfelder) - 1)

        End If

        Me.cboListenfelder.RowSource = strListenfelder

        Me.SetFocus

        Me.cboListenfelder.SetFocus

    End Sub

    Quellcode 2

    Die beiden weiteren Anweisungen setzen die Kombinationsfelder zur Auswahl von Rahmenbreite und Spezialeffekt auf den ersten Wert der entsprechenden Datensatzherkunft der Kombinationsfelder.

    Auswahl des
    Listenfeldes

    Nach der Auswahl des Formulars soll das Kombinationsfeld cboListenfelder alle Listenfelder des ausgewählten Formulars zur Auswahl anbieten.

    Da der Inhalt dieses Kombinationsfeldes für jedes Formular anders ist, wird seine Datensatzherkunft nach jeder Auswahl eines neuen Formulars aktualisiert. Diese Aufgabe übernimmt die Prozedur aus Quellcode 2, die durch das Ereignis Nach Aktualisierung des Kombinationsfeldes cboFormulare ausgelöst wird.

    Die Prozedur überprüft zunächst, ob das im Kombinationsfeld cboFormular ausgewählte Formular geöffnet ist. Falls nicht, öffnet es das Formular nach Bestätigung durch den Benutzer in der Entwurfsansicht. Anschließend liest es die Namen aller Steuerelemente aus der Auflistung Controls aus, deren Eigenschaft ControlType den Wert acListbox hat, und schreibt sie durch Semikola getrennt in eine Stringvariable. Danach entfernt die Prozedur das abschließende Semikolon der Stringvariablen und weist sie der Datensatzherkunft des Kombinationsfeldes cboListenfelder zu.

    Private Sub cmdSchriftartAuswaehlen_Click()

        With Me.lblBeschriftung

            ShowFont .FontName, .FontItalic, .FontBold, _
               .FontSize, .ForeColor, .FontUnderline

        End With

    End Sub

    Quellcode 3

    Auswahl der Eigenschaften

    Die weiteren Steuerelemente dienen zur Auswahl der Eigenschaften der anzulegenden Listenfeldüberschriften.

    Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

    Sind Sie Abonnent?Jetzt einloggen ...
     

    Kompletten Artikel lesen?

    Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

    E-Mail:

    Verwandte Beiträge:

    Excel-Import-Assistent im Eigenbau

    Access-Add-Ins

    Listenfeld und Details in einem Formular

    © 2003-2015 André Minhorst Alle Rechte vorbehalten.