Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Bericht drucken mit variabler Anzahl an Kopien

Begonnen von Alex_80, September 17, 2014, 08:27:50

⏪ vorheriges - nächstes ⏩

MaggieMay

Zitat
Wie kommst du denn jetzt auf die Idee?!  ::)
(Wo ist denn der Satz geblieben, den ich da zitieren wollte?  ???)

Versuche doch bitte mal die paar Zeilen Code zu verstehen, indem du Zeile für Zeile und Befehl für Befehl durchgest und hinterfragst was da passiert.
Du kannst den Code auch im Unterbrechungsmodus testen, indem du einen Haltepunkt setzt vor dem Aufruf.
Freundliche Grüße
MaggieMay

Alex_80

Also ich muss gestehen, dass mir VBA sehr schwer fällt und ich da nur sehr schlecht durchsteige. Und auf solche komplexen Codes würde ich alleine gar nicht kommen. Wie setze ich denn einen Haltepunkt um die DCount Funktion zu testen? Weil in der Abfrage sind die beiden Patienten drin, aber gedruckt wird dennoch nur ein Exemplar. Auch nachdem ich i+1 gesetzt habe:

Private Sub Umschaltfläche120_Click()
Dim rptQuery As String
Dim rs As DAO.Recordset
Dim i As Long
rptQuery = "qry_LB_gesamt_Einzeldruck_Formular_850"
Set rs = CurrentDb.OpenRecordset("Select Distinct Krankenkasse From [" & rptQuery & "] ORDER BY Krankenkasse")
Do While Not rs.EOF
    i = DCount("*", rptQuery, "Krankenkasse='" & rs!Krankenkasse & "'")
    DoCmd.OpenReport "rpt_Anschreiben KK", acViewPreview, , "Krankenkasse='" & rs!Krankenkasse & "'"
    DoCmd.PrintOut , acPrintAll, , , , i + 1
    DoCmd.Close acReport, "rpt_Anschreiben KK"
    rs.MoveNext
Loop
Set rs = Nothing
End Sub


Der Bericht selber ist normal aufgebaut: Es gibt einen Kopf- und Fußbereich "Krankenkasse" mit dem Detailbereich, wo halt die Anzahl der Patienten aufgelistet werden. Somit wird für jede Krankenkasse ein neuer Bericht mit den dazugehörigen Patienten erstellt. Einen Unterbericht gibt es keinen.

MaggieMay

Den Haltepunkt setzt du per Klick auf den Rahmen auf der linken Code-Seite im VBA-Editor.
In der Zeile muss ein ausführbarer Befehl stehen. Mit F8 springst du von Befehl zu Befehl.
Gehst du mit der Maus über die Variablen, sollte der Inhalt angezeigt werden.

Und "qry_LB_gesamt_Einzeldruck_Formular_850" ist tatsächlich die Datenquelle des Berichts??
Freundliche Grüße
MaggieMay

Alex_80

Also ich habe den VBA Code jetzt so hin bekommen, dass alles klappt :-). Vielleicht war es doch ganz gut die Sache Schritt für Schritt durchzugehen :-)

Ich darf mich an dieser Stelle bei allen recht herzlich bedanken für die Hilfe!

Allerdings hätte ich noch eine Verständnisfrage: Bei der VBA Zeile:

DoCmd.OpenReport "rpt_Anschreiben KK", acViewPreview, , "Krankenkasse='" & rs!Krankenkasse & "'"

Wofür steht das "Krankenkasse='" & rs!Krankenkasse & "'" bzw. was hat dies für eine Funktion? Und wozu dienen die Hochkommers?

MaggieMay

Der Ausdruck ist ein Kriterium nach dem der Bericht beim Öffnen gefiltert werden soll, so dass ein Bericht pro Krankenkasse erzeugt wird.

Die Hochkommata wurden eingefügt nachdem offensichtlich wurde, dass du nach der Krankenkassen-Bezeichnung und nicht nach deren Datensatz-ID filtern wolltest.
Freundliche Grüße
MaggieMay

Alex_80


Alex_80

#21
Guten Morgen,

jetzt ist doch noch ein kleiner Fehler aufgetreten, wo ich nicht weiß warum. Hier kurz der VBA-Code:

Private Sub Umschaltfläche120_Click()
Dim db As Database
Dim rst As DAO.Recordset
Dim i As Long
Set rst = CurrentDb.OpenRecordset("Select Distinct Krankenkasse from qry_LB_gesamt_Einzeldruck_Formular_850")
Do While Not rst.EOF
i = DCount("[qry_LB_gesamt_Einzeldruck_Formular_850]![Krankenkasse]", "[qry_LB_gesamt_Einzeldruck_Formular_850]")
DoCmd.OpenReport "rpt_Anschreiben KK", acViewPreview, , "Krankenkasse='" & rst!Krankenkasse & "'"
DoCmd.PrintOut acPrintAll, , , , i+1
DoCmd.Close acReport, "rpt_Anschreiben KK"
rst.MoveNext
Loop
Set rst = Nothing
DoCmd.OpenReport "rpt_Einzeldruck_850", acViewPreview
DoCmd.PrintOut acPrintAll
DoCmd.Close acReport, "rpt_Einzeldruck_850"

DoCmd.OpenQuery "Setzen des Hakens Anschreiben Krankenkasse_850", acViewNormal

End Sub


Es geht um den Ausdruck im Abschnitt "Do While Not rst.EOF". Alles läuft prima, nur druckt Access die Anzahl der Ausdrucke falsch aus. Kurz zur Erklärung:

Auf dem Anschreiben für z.B. die AOK stehen zwei Patienten. Hier sollen zwei Ausdrucke plus ein Original (Anschreiben) erstellt werden. Auf dem Anschreiben für z.B. die TKK steht ein Patient, wo dann ein Ausdruck plus ein Original erstellt werden soll.

Was tatsächlich passiert ist, dass Access scheinbar die Gesamtzahl der Patienten oder Krankenkassen in der Abfrage zählt, also drei insgesamt, und somit auch für jedes Anschreiben drei Ausdrucke macht. Das heißt egal wie viele Patienten bei der Krankenkasse vermerkt ist, er druckt jedes Anschreiben mal der Anzahl der Patienten oder Krankenkasse, obwohl bei der TKK z.B. nur einer drauf steht. 

Muss ich da evtl. doch ein anderes Abgrenzungs- oder Zählkriterium wählen, damit es für Access deutlicher ist?

MaggieMay

Hallo,

du musst beim DCount ein Kriterium einsetzen, damit du nur die Datensätze des aktuellen Krankenhauses zählst. Ich denke das wurde zuvor auch so gezeigt.
Freundliche Grüße
MaggieMay

Alex_80

#23
Tut mir leid, aber das verstehe ich jetzt leider nicht. Ich habe ja nur ein Krankenhaus in der Betrachtung. Und in der Abfrage stehen aktuell drei Datensätze, wobei Access aber für die Anschreiben immer die Anzahl drei nimmt und ausdruckt.

Stünden in der Abfrage fünf verschiedene Datensätze mit fünf verschiedenen Krankenkassen, würde Access jetzt für jede Krankenkasse fünf Anschreiben drucken, wobei nur eins + Original nötig wären.

Daher verstehe ich nicht, wie ich das Kriterium setzten soll, damit er erkennt, dass dann beim Wechsel der Krankenkasse neu gezählt werden muss, damit er die richtige Anzahl an Ausdrucken ermitteln kann.

Alex_80

Ah...sorry. Nehme alles zurück. Du hast Recht! Ich habe den Fehler gefunden.....es klappt jetzt :-).