Formulare und Berichte über Listenfelder öffnen

  • geschlossen
  • Access

  • HobbY-FreaK
  • 3115 Aufrufe 0 Antworten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Formulare und Berichte über Listenfelder öffnen

    Formulare und Berichte über Listenfelder öffnen
    Versionen: Access 97, 2000, 2002/XP und 2003

    In Ihren Datenbanken setzen Sie häufig Menüformulare ein, über die Sie mit Hilfe von Schaltflächen Formulare und Berichte per "DoCmd.OpenForm" und "DoCmd.OpenReport" öffnen. Bei kleineren Datenbanken ist diese Technik noch praktikabel: Für neue Formulare und Berichte wird eine vorhandene Schaltfläche einfach kopiert und angepasst. Bei größeren Datenbanken geht Ihnen jedoch nicht nur irgendwann der Platz für Schaltfläche im "Menüformular" aus und erfordert den Einsatz von Registerkarten zur Gruppierung, gleichzeitig verlieren Sie auch irgendwann die Übersicht. Um ein bestimmtes Formular zu öffnen, müssen Sie die Beschriftungen mehrerer Schaltflächen lesen und eventuell sogar zur Gruppierung eingesetzte Registerkarten umschalten. Wesentlich praktikabler und einfacher wäre hier der Aufruf über Listenfelder. Durch Eintippen des Buchstabens "Q" positionieren Sie die Liste beispielsweise auf den ersten Bericht, dessen Name mit "Q" beginnt und finden ab hier nun schnell zum Beispiel die gewünschte "Quartalsübersicht 2004". Und um Aktualisierungen müssen Sie sich bei einer solchen Technik auch nicht mehr kümmern, denn neue Formulare und Berichte werden automatisch in die Auswahllisten übernommen. Um eine solche Auswahl per Liste in Ihre Datenbank einzubauen, gehen Sie wie folgt vor:


    1. Legen Sie ein neues, leeres Formular an, dessen Beschriftung Sie beispielsweise auf "Hauptmenü" oder ähnlich setzen.
    2. Schalten Sie "Bildlaufleisten", "Navigationsschaltflächen" und "Datensatzmarkierer" auf "Nein" um.
    3. Platzieren Sie in diesem Formular zwei Listenfelder "lstForms" und "lstReports" mit einer Breite von 5 cm nebeneinander, deren Bezeichnungsfelder Sie entsprechend auf "Formulare:" und "Berichte:" ändern.
    4. Geben Sie in der Eigenschaft "Datensatzherkunft" für die Liste "lstForms" folgende SQL-Anweisung ein:
    select Name from MSysObjects where Type= -32768
    and Left([Name],1)<> "~" order by Name;
    [font=arial, helvetica][size=-1]

    • Geben Sie in der Eigenschaft "Datensatzherkunft" für die Liste "lstReports" folgende SQL-Anweisung ein:
    [/size][/font]select Name from MSysObjects where Type= -32764
    and Left([Name],1)<> "~" order by Name;
    [font=arial, helvetica][size=-1]
    In der Tabelle "MSysObjects" verwaltet Access die Eigenschaften sämtlicher Datenbank-Objekte. Diese Tabelle lässt sich per Abfrage oder SQL-Anweisung auslesen und so eine Datenbasis für Listenfelder gewinnen. Das Feld "Name" liefert den Namen, so wie er im Datenbankfenster angezeigt wird. Das Feld "Type" gibt Auskunft über den Typ des Objektes und lässt sich über ein Kriterium der Art "Type= -32768" für die Selektion bestimmter Objekte nutzen. Ein weiteres Kriterium 'Left([Name],1)<> "~"' sorgt dafür, dass temporäre Objekte ausgeklammert werden.


    • Legen Sie unter der Liste "lstForms" eine mit dem rechten Rand der Liste abschließende Schaltfläche Öffnen (Name = btnOpenForm) an und geben Sie für die Ereignisprozedur "Beim Klicken" folgende Anweisung ein:
    [/size][/font]Private Sub btnOpenForm_Click()

    On Error Resume Next
    DoCmd.OpenForm Me.lstForms
    If Err <> 0 Then Beep

    End Sub
    [font=arial, helvetica][size=-1]

    • Geben Sie für die Ereignisprozedur "Beim Doppelklicken" der Liste "lstForms" die folgende Anweisung ein:
    [/size][/font]Private Sub lstForms_DblClick(Cancel As Integer)

    btnOpenForm_Click

    End Sub
    [font=arial, helvetica][size=-1]

    • Legen Sie unter der Liste "lstReports" eine mit dem rechten Rand der Liste abschließende Schaltfläche Öffnen (Name = btnOpenReport) an und geben Sie für die Ereignisprozedur "Beim Klicken" folgende Anweisung ein:
    [/size][/font]Private Sub btnOpenReport_Click()

    On Error Resume Next
    DoCmd.OpenReport Me.lstReports
    If Err <> 0 Then Beep

    End Sub
    [font=arial, helvetica][size=-1]

    • Geben Sie für die Ereignisprozedur "Beim Doppelklicken" der Liste "lstReports" die folgende Anweisung ein:
    [/size][/font]Private Sub lstReports_DblClick(Cancel As Integer)

    btnOpenReport_Click

    End Sub
    [font=arial, helvetica][size=-1]

    • Speichern Sie das Formular und lassen Sie es über das Menü Ansicht-Formularansicht einmal testweise anzeigen.
    Sie können nun bequem Formulare und Berichte nach Markierung eines Eintrages und Klick auf die Schaltfläche Öffnen oder einfach per Doppelklick auf den gewünschten Eintrag öffnen.

    -------------------------------------------------------------------------

    Nachtrag:
    Bei einem Klick auf die Schaltfläche Öffnen unter der Liste mit den Berichten wird der Bericht sofort ausgedruckt. Kann man die Lösung so ändern, dass Berichte wahlweise ausgedruckt oder in der Seitenansicht geöffnet werden?

    Gehen Sie dazu folgendermaßen vor:


    1. Legen Sie links von der Schaltfläche "btnOpenReport" ein Kontrollkästchen "cbPreview" an, dessen Beschriftung Sie auf "Seitenansicht" setzen.
    2. Geben Sie für die Ereignisprozedur "Beim Laden" des Formulars folgende Anweisung ein:
    Private Sub Form_Load()

    Me.cbPreview = True

    End Sub
    [font=arial, helvetica][size=-1]

    • Ändern Sie die Ereignisprozedur "Beim Klicken" der Schaltfläche "btnOpenReport" wie folgt:
    [/size][/font]Private Sub btnOpenReport_Click()

    On Error Resume Next
    If Me.cbPreview Then
    DoCmd.OpenReport Me.lstReports, acViewPreview
    Else
    DoCmd.OpenReport Me.lstReports
    End If
    If Err <> 0 Then Beep

    End Sub
    [font=arial, helvetica][size=-1]
    Diese Änderungen sorgen dafür, dass der gewählte Bericht je nach Status des Kontrollkästchens entweder in der Seitenansicht angezeigt oder direkt auf dem Drucker ausgegeben wird.

    [/size][/font]
    Übernommen von SmartTools
    [/size][/font]