none
Access 2000 Report Bericht Seitenzahl / me.pages liefert nur Nullen

    Frage

  • Hallo Expertenrunde!

    Wir haben folgendes Problem mit den Seitenzahlen von Berichten in Access 2000:

    Nach der Berichtserstellung muss eine globale Variable mit der aktuellen Seitengesamtzahl des Berichtes versorgt werden. Zu diesem Zweck wurde folgende Eventroutine für jeden der betroffenen Berichte eingesetzt:

    Private Sub Seitenfußbereich_Print(Cancel As Integer, PrintCount As Integer)
        gRepCountBericht = Me.Pages
    End Sub

    Das funktionierte bisher auch ganz prima.

    Dann mussten die Berichte umgestellt werden, u.a. enthalten sie nun Unterberichte für den ehemaligen Detailbereich. Das funktioniert auch alles ganz prima, nur:

    das o.g. Event liefert seitdem immer nur den Wert 0. Auch andere events im Hauptbericht und im Unterbericht liefern 0. Fehlerursache unbekannt, liegt es an den Unterberichten? Aber der Hauptbericht müsste doch trotzdem seine Seitenzahl kennen, zumal er sie auch korrekt ausdruckt!

    Bin hilflos. Vielen Dank für Ideen oder Tipps!

    Raimund Gryszik, Berlin

    Donnerstag, 3. Juni 2010 13:42

Antworten

  • Ich habe die (zunächst unerklärliche) Fehlerursache nun selbst gefunden, hier die Beschreibung:

    Wenn in irgendeinem Steuerelement/Textfeld im Bericht die "interne" Variable [Seiten] verwendet bzw. ausgedruckt wird, dann steht in me.pages die korrekte Zahl.

    Wenn diese Variable [Seiten] jedoch nicht benutzt wird bzw. in keinem Steuerelement auftaucht, dann steht in PAGES immer Null!

    [Seiten] dient nämlich zum Ausdrucken der Gesamtseitenzahl des Berichtes.

    Uff!

    Raimund

     

    Freitag, 4. Juni 2010 13:22

Alle Antworten

  • Hallo allerseits,

    ich kann das Problem jetzt noch genauer formulieren. Es tritt für mehrere verschiedene Access-Berichte in gleicher Form auf, und es scheint nichts mit Unterberichten zu tun zu haben. Ich formuliere es jetzt für einen, stellvertretend für alle:

    Ursprünglich gab es einen Bericht "Rep_ALT", dessen Gesamtseitenzahl im Event Seitenfußbereich_Print mit me.pages ermittelt wird. Das funktioniert auch heute noch mit diesem alten Bericht problemlos!

    Dann mussten alle Berichte umgestellt werden, u.a. wurde das Papierformat geändert, der ehemalige Detailbereich wurde zu einem Unterbericht verändert, und es werden zwei Spalten gedruckt. Ich nenne das jetzt mal Rep_NEU.

    Seitdem liefert me.pages in allen denkbaren Events immer 0 ab.

    Ich habe nun folgendes mit Rep_NEU gemacht: Reduktion der Spaltenzahl auf 1, Eliminieren des Unterberichtes. Das Problem besteht weiterhin. Nun habe ich in das Event Seitenfußbereich_Print einen Debug-Haltepunkt gesetzt, und mir sämtliche Eigenschaften des Objektes ME (ist der Bericht, nicht der Seitenfuß) für ALT und NEU ausgedruckt. Bis auf die inhaltlichen Änderungen, z.B. auch Breite und Höhe, sind alle Eigenschaften identisch, nur PAGES ist eben bei dem alten =3 und bei dem neuen =0.

    Ist Access kaputt? Was tun?

    Ich werde jetzt erst mal bei Rep_ALT sämtliche Einzelschritte wieder nachvollziehen, um zu Rep_NEU zu kommen, um den Fehler zu lokalisieren. Das wird mich sehr lange beschäftigen, da die neuen Berichte äußerst ausgefeilt sind.

    Da dieses Problem für uns äußerst wichtig (und natürlich auch dringend) ist, und da ich mangeln Antworten schon ziemlich verzweifelt bin, habe ich ausnahmsweise auch noch in die alte Access-NG gepostet. Bitte um Nachsicht wegen diesem Crossposting!

    Raimund

    Freitag, 4. Juni 2010 12:26
  • Ich habe die (zunächst unerklärliche) Fehlerursache nun selbst gefunden, hier die Beschreibung:

    Wenn in irgendeinem Steuerelement/Textfeld im Bericht die "interne" Variable [Seiten] verwendet bzw. ausgedruckt wird, dann steht in me.pages die korrekte Zahl.

    Wenn diese Variable [Seiten] jedoch nicht benutzt wird bzw. in keinem Steuerelement auftaucht, dann steht in PAGES immer Null!

    [Seiten] dient nämlich zum Ausdrucken der Gesamtseitenzahl des Berichtes.

    Uff!

    Raimund

     

    Freitag, 4. Juni 2010 13:22
  • Hallo Raimund,

    Folgender Codeschnipsel zählt in cPage die Seitenanzahl der Seiten die ausgedruckt wurden also es funktioniert nach dem Drucken.

     

    Public bFlagLastPage As Boolean
    Function MultiPrint(nCopies As Integer, strReportName As String)
    Dim cPage As Integer
    
    DoCmd.SelectObject acReport, strReportName, True
    
    For cPage = 1 To 10
     If bFlagLastPage = True Then Exit For
     DoCmd.PrintOut acPages, cPage, cPage, , nCopies, True
    Next cPage
    End Function

     

    Habe noch etwas gefunden indem man das PrintPreview mit acHidden verwendet:

     

    Dim stDocName as String 
    stDocName ="Name of your Report" 
    
     DoCmd.OpenReport stDocName, acViewPreview, , , acHidden 
      If MsgBox("There are " & Reports(stDocName).Pages & " pages in this report, Are you sure want to print it?", vbOKCancel + vbQuestion, "Confirm Print") = vbOK Then 
       DoCmd.OpenReport stDocName, acViewNormal, , , acWindowNormal 
     Else 
      DoCmd.Close acReport, stDocName 
     End If

     

    Grüße,

    Robert

    Freitag, 4. Juni 2010 14:31
    Besitzer