Tipps und Tricks zu Berichten

André Minhorst, Duisburg; Manfred Hoffbauer, Düsseldorf

In den Tipps und Tricks der vorliegenden Ausgabe finden Sie einige interessante Möglichkeiten, die Ausgabe von Berichten effizienter zu gestalten. Dabei beziehen sich die folgenden Tipps und Tricks zum größten Teil auf die Schritte, die um die eigentliche Berichterstellung herum erfolgen. Nach der Lektüre der kommenden Seiten können Sie Ihre Datenbank zum Beispiel leicht vor Benutzern schützen, die Berichte ohne Daten oder ohne Vorhandensein eines Druckers ausgeben möchten.

Was ist schon ein Bericht ohne Daten Das sollten Sie sich überlegen, bevor Sie Ihre Kunden oder Mitarbeiter auf eine von Ihnen entwickelte Datenbank loslassen.

Um zu verhindern, dass Berichte ohne Daten angezeigt werden, gibt es prinzipiell zwei Möglichkeiten: Entweder Sie überprüfen die Datenherkunft vor dem Aufrufen des Berichts oder Sie verwenden die Ereigniseigenschaft Bei ohne Daten von Berichten.

Datenherkunft vor dem öffnen des Berichts überprüfen

Während der Entwicklungsphase einer Datenbank oder bei Datenbanken für interne Zwecke ist das öffnen von Berichten über einen Doppelklick auf den entsprechenden Eintrag im Datenbankfenster gängige Praxis.

In den meisten Fällen erfordert das öffnen von Berichten aber die übergabe von Parametern wie Filterbedingungen und dergleichen oder die Datenbank soll von Mitarbeitern oder Kunden verwendet werden. Hier erfolgt das öffnen von Berichten in der Regel über entsprechende Prozeduren, die der Benutzer entweder durch das Betätigen von Schaltflächen oder die Verwendung von Menüeinträgen aufruft.

In diesen Fällen können Sie leicht vor dem eigentlichen öffnen des Berichts dessen Datenherkunft überprüfen.

Falls die Datenherkunft keine Daten enthält, geben Sie eine entsprechende Meldung aus und unterbinden das öffnen des Berichts.

Hinweis

Wenn Sie noch einen Schritt weiter gehen möchten, können Sie die Steuerelemente, die dem öffnen des Berichts dienen, erst bei Vorhandensein von Daten aktivieren und ansonsten deaktivieren. Dies zieht aber in der Regel einen unverhältnismäßig hohen Programmieraufwand nach sich.

Verwenden der Ereigniseigenschaft Bei Ohne Daten

Berichte stellen die Ereigniseigenschaft Bei Ohne Daten zur Verfügung, die beim öffnen eines Berichts mit leerer Datenherkunft ausgelöst wird.

Ein Beispiel für den Aufbau dieser Prozedur finden Sie in Quellcode 1.

Neben einer entsprechenden Meldung, die den Benutzer auf das Fehlen der Daten hinweist, müssen Sie den Wert des Parameters Cancel auf den Wert True setzen. Nur dann wird das öffnen des Berichts abgebrochen.

Private Sub Report_NoData(Cancel As Integer)
    MsgBox "Der Bericht enthält keine Daten."
    Cancel = True
End Sub

Quellcode 1

Private Sub cmdBerichtDrucken_Click()
    On Error GoTo cmdBerichtDrucken_Click_Err
        DoCmd.OpenReport "<Berichtsname>"
    Exit Sub
cmdBerichtDrucken_Click_Err:
    If Err.Number = 2501 Then
        Resume Next
    End If
End Sub

Quellcode 2

Bild 1: Standarddrucker in der Registry

Wenn Sie den Bericht per Code und nicht über das Datenbankfenster aufgerufen haben, löst das Abbrechen des öffnen-Vorgangs einen Fehler aus. Diesen sollten Sie in der Prozedur mit der Anweisung zum öffnen des Berichts berücksichtigen und eine Fehlerbehandlung wie in Quellcode 2 verwenden.

Bevor ein Bericht überhaupt in der Vorschau angezeigt geschweige denn ausgedruckt werden kann, muss auf dem aktuellen Rechner zunächst einmal ein Drucker installiert und als Standarddrucker definiert sein.

Wenn Sie versuchen, einen Bericht ohne installierten Standarddrucker auszugeben, erhalten Sie eine entsprechende Fehlermeldung.

Bei der Ermittlung des Standarddruckers hilft Ihnen die API-Funktion GetProfileString. Die Funktion dient dem Auslesen bestimmter Werte aus der Windows-Registry (siehe Bild 1) bzw. in früheren Windows-Versionen aus der Datei Win.ini.

Diese Funktion (s. Quellcode 3) deklarieren Sie im Kopf eines neuen VBA-Moduls. Die Funktion StandarddruckerErmitteln ruft die API-Funktion auf und übergibt beim Aufruf automatisch die für die Ermittlung des Standarddruckers erforderlichen Parameter (s. Quellcode 4).

Außerdem verarbeitet sie das Ergebnis der Funktion direkt mit der Funktion TeilstringErmitteln (s. Quellcode 5) weiter, die den ersten der Einträge des Ergebnisses ausliest.

Zeichenketten trennen per Funktion

Die Funktion TeilstringErmitteln hat drei Parameter: Gesamtstring, Trennzeichen und Teilstringnummer. Mit dem ersten Parameter übergeben Sie der Funktion die auszuwertende Zeichenkette.

Der zweite Parameter enthält das Zeichen, das in der Zeichenkette als Trennzeichen verwendet wird – also beispielsweise Komma, Semikolon und so weiter. Der dritte Parameter enthält die Nummer des Elements der Liste, das die Funktion zurückgeben soll.

Private Declare Function GetProfileString Lib "kernel32" Alias "GetProfileStringA" _
    (ByVal lpAppName As String, ByVal lpKeyName As String, ByVal lpDefault As _    String, ByVal lpReturnedString As String, ByVal nSize As Long) As Long

Quellcode 3

Public Function StandarddruckerErmitteln() As String
    Dim Rueckgabewert As String
    Dim Funktionsergebnis As Long
    Rueckgabewert = String(255, Chr(0))
    Funktionsergebnis = GetProfileString("Windows", "Device", "", Rueckgabewert, _        Len(Rueckgabewert))
    If Funktionsergebnis > 0 Then
        GetDefaultPrinter = TeilstringErmitteln(Rueckgabewert, ",", 1)
    Else
        GetDefaultPrinter = ""
    End If
End Function

Quellcode 4

Private Function TeilstringErmitteln(Gesamtstring As String, Trennzeichen As String, _    Teilstringnummer As Integer) As String
    Dim Startposition As Integer
    Dim Endposition As Integer
    Dim AktuelleStringnummer As Integer
    Dim AktuellesZeichen As Integer
    AktuellesZeichen = 1
    Startposition = 0
    For AktuelleTeilstringnummer = 1 To Teilstringnummer - 1
        AktuellesZeichen = InStr(AktuellesZeichen, Gesamtstring, Trennzeichen)
        If AktuellesZeichen = 0 Then
            Teilstring = ""
            Exit Function
        Else
            AktuellesZeichen = AktuellesZeichen + 1
        End If
    Next AktuelleTeilstringnummer
    Startposition = AktuellesZeichen
    Endposition = InStr(Startposition + 1, Gesamtstring, Trennzeichen)
    If Endposition = 0 Then
        Endposition = Len(Gesamtstring) + 1
    End If
    Teilstring = Mid$(Gesamtstring, Startposition, Endposition - Startposition)
End Function

Quellcode 5

Im vorliegenden Fall übergibt die Funktion StandarddruckerErmitteln der Funktion TeilstringErmitteln die Zeichenkette Acrobat PDFWriter,winspool,LPT1:, als Trennzeichen das Komma und als Nummer des zurückzugebenden Elements die 1.

Die Funktion TeilstringErmitteln gibt folgerichtig die Zeichenkette Acrobat PDFWriter zurück.

Praxis-Tipp

Falls Sie nicht bereits über eine Funktion zum Zerlegen von Zeichenketten verfügen, sollten Sie die Funktion TeilstringErmitteln kopieren und Ihrer Funktionssammlung hinzufügen. Sie kann in vielen weiteren Fällen verwendet werden.

Private Sub cmdBerichtDrucken_Click()
    If StandarddruckerErmitteln = "" Then
        MsgBox "Bitte legen Sie einen Standarddrucker fest bzw. installieren Sie " _            & "einen Drucker, falls keiner installiert ist.", _            vbOKOnly + vbExclamation, "Kein Standarddrucker definiert"
    Else
        DoCmd.OpenReport "<Berichtsname>"
    End If
End Sub

Quellcode 6

Zur sinnvollen Anwendung der Funktionen müssen Sie diese vor dem Anzeigen von Berichten aufrufen und überprüfen, ob ein Standarddrucker festgelegt ist.

Ist das nicht der Fall, geben Sie einfach eine entsprechende Meldung aus, damit der Benutzer die notwendigen Schritte einleiten kann. Eine entsprechende Prozedur können Sie Quellcode 6 entnehmen.

Sie haben das Ende des frei verfügbaren Textes erreicht. Möchten Sie ...

TestzugangOder bist Du bereits Abonnent? Dann logge Dich gleich hier ein. Die Zugangsdaten findest Du entweder in der aktuellen Print-Ausgabe auf Seite U2 oder beim Online-Abo in der E-Mail, die Du als Abonnent regelmäßig erhältst:

Schreibe einen Kommentar