Access Bericht drucken

Hi,
möchte einen Bericht sortieren, und ausdrucken.
mein code funktioniert nur teileweise.
Desweiteren wo starte ich den code am besten, beim Bericht laden, öffnen, schließen ?
Private Sub Report_Open(Cancel As Integer)

On Error GoTo Err_cmdDruck_Click

Dim stDocName As String

DoCmd.OpenReport stDocName, acPreview, , globalfilter

If Me.OrderByOn Then
Reports!meinBericht.OrderBy = Me.OrderBy
Reports!meinBericht.OrderByOn = True
End If

DoCmd.RunCommand acCmdPrint
DoCmd.Close acReport, stDocName
Exit_cmdDruck_Click:
Exit Sub
Err_cmdDruck_Click:
MsgBox err.Description
Resume Exit_cmdDruck_Click
End Sub

Gruss Jürgen

Hallo,

schau dir deine Gruppierungen, Kopf und Fußbereich an, meist liegt es daran…

Davon abgesehen, was soll denn diese Zeile bewirken?
Reports!meinBericht.OrderBy = Me.OrderBy

Gruß
Marco

kann leider nicht helfen

Hallo Jürgen,
ich kann Dir leider nicht helfen, da ich mit Access-Berichten keine Erfahrung habe.
Aber sieh doch mal im Forum ms-office-forum.net nach.
Anmelden für detailierte Such ist erforderlich, kann man aber nur empfehlen.

Gruß
Vincenz

Hallo Jürgen
melde mich Montag mit einer Lösung
Gruss und schönes Wochenende
fonti46

Hi
eine Möglichkeit ist im Open Event des Berichtes

Leg hierzu zwei globale Variablen fest, die z. b. das Filterkriterium und das Sortierkriterium beinhalten

Eigenes Modul modGlobal:
Option Compare Database
Option Explicit

Public g_filter As String
Public g_orderby As String

Setze dann diese Kriterien, zB in einem Formular mit

  • einem Textfeld für das Filterkriterium
  • einer Kombobox für das Sortierkriterium
    Typ: Werteliste
    Datensatzherkunft: „ASC“;„Aufsteigend“;„DESC“;„Absteigend“
  • Schaltfläche zum Drucken

Modul für Formluar:
Option Compare Database
Option Explicit

Private Sub btnPrint_Click()
On Error GoTo labelErr

g_filter = Nz(txtFilter)
g_orderby = Nz(cbxSort)

Dim strReport As String
strReport = „rpt_produkt“

DoCmd.Close acReport, „strReport“, acSaveYes
DoCmd.OpenReport strReport, acPreview
labelOK:
Exit Sub

labelErr:
MsgBox Err.Description
Resume labelOK
End Sub

Modul fuer Bericht:
Option Compare Database

Private Sub Report_Open(Cancel As Integer)
With Me

If g_filter = „“ Then
g_filter = „*“
End If

.Filter = „PRODUKT LIKE '“ & g_filter & „’“
.FilterOn = True

.OrderBy = "PRODUKT " & g_orderby
.OrderByOn = True
End With
End Sub

Hallo!

Soweit ich weiß kann man einen aus einem Formular geöffneten Bericht nicht im Nachhinein sortieren.
Ich würde daher mehrere Berichte (unterschiedlich sortiert) erstellen und die Variable stDocName je nach gewünschter Sortierung abändern; z.B. mit einer Select-Case-Verzweigung. Das Argument acViewNormel anstatt acPreview druckt den Bericht dann gleich aus.

Gruß
Lukas

Hallo Jürgen, kann Dir da leider nicht weiterhelfen. Weiß auch nicht genau, was Du mit dem Code erreichen willst. „acPreView“ ist mir unbekannt. Wenn ich zur Laufzeit am Bericht was ändrn will, dann mit „acDesign“.
Gruß
Thomas

Hallo EchoJürgen,

ich habe das jetzt nicht konkret ausprobiert,
glaube aber es geht mit allen Dreien nicht.
In C++ hat man fünf Ereigneisse oder mehr zum Öffnen
und ebensoviele zum Schließen sodass man an den
verschiedenen „richtigen“ Stellen des Prozesses eigene Anweisungen einbauen kann. In Access ist das nur rudimentär vorhanden. Beim Öffnen kann es sein,
dass Du an der Stelle „bevor“ das Fenster geöffnet wird,
mit Deinem Code angesprungen wirst und dann geht gar nichts. Was Du bräuchtest ist genaus die Stelle am
Ende des Öffnungsprozesses, wo alles da ist, da habe ich
aber kein geeigntes Onxxx gefunden.

Ich empfehle Dir eine Formular zu machen mit drei
Buttons, Öffnen Bericht, Sortieren, dann siehst Du
wie es danach aussieht und dann einen Drucken Button.
Ggfs. mit Makros die die verschiedenen Schritte ausführen.

Viele Grüße

Peter

Hallo Jürgen,
habe zufällig nochmals reingeschaut und meine Antwort vom Montag nicht gefunden. Hier nochmals:
Ich nehme an, dein Codebeispiel ist in einem Formular gespeichert (Ich nenne es mal „DeinFormular“) und das OrderBy Feld ist einem Listfeld (Ich nenne es mal lstOrderBy). Beim Aufruf des Reports steht bei der „where“ Stelle -> globalfilter. Was ist das? Hier wird normalerweise ein SQL Statement erwartet. Eine Position vorher wäre der Platz für das Filterelement. Der OrderBy Teil kommt in den Report unter „beim Laden“ mit Bezugnahme auf das Formular:
Me.OrderBy = forms!DeinFormular!lstOrderBy
Me.OrderByOn = true
Du kannst es auch noch mit dem „If forms!deinFormular!chkOrderBy = true then… umrahmen, ist aber nicht zu empfehlen, da dann der Bericht eventuell unsortiert rauskommt.
Den Print und Close Befehl kannst du im Formular lassen, bringt allerdings nicht viel, besser gleich den Bericht mit „AcNormal“ aufrufen.
Gruss
Fonti46

Hi,
danke für die Info, habe es auch hinbekommen, die Daten werden sortiert und anschließend mit acnormal ausgedruckt.
Toll wäre es, wenn ich noch das Bild bekomme druckerauswahl wie z.B. mit dem befehl print, habe ich versucht, dann druckt er einmal den bericht und dann noch einmal, aber jetzt mit Druckerauswahl das Formular.
Gruss Jürgen

Hallo Jürgen
Falls du Access 07 oder 10 hast würde ich den Druckbefehl in die Schnellzugriffsleiste übernehmen und wieder auf acPreview umstellen, der acCmdPrint funktioniert nur auf einen geöffneten Bericht
Gruss
Fonti46