Hallo,
ich habe eine Frage an die Spezialisten als Anfänger.
Über ein Kombifeld 'KKursraum' (enthält Raumnummer 1,2,3,4 als Werteliste) in einem Listenfeld 'Filterliste' Daten aus einer Abfrage filtern.
Vor der Filterung sollen alle Datensätze im Listenfeld stehen. Über einen Button "Filter zurücksetzen" sollen die Datensätze wieder ungefiltert angezeigt werden. (Später..... sollen die DS in der gefilterten Liste an einen Bericht übergeben werden.)
Eigenschaften des Listenfelder 'Filterliste':
SELECT Kurs.Raumnr Kurs.Datum Kurs.Uhrzeit Kurs.Teilnehmer_ID Kurs.Teilnehmer_Nachname Kurs.Teilnehmer_Vorname
FROM Kurs WHERE (((Kurs.Raumnr) Like [KKursraum]));;;
VBA:
- Beim Öffnen des Formulars für die Filterung ,,Orga_Kurs"
Private Sub Form_Open(Cancel As Integer)
Me!KKursraum,.SetFocus
End Sub
Private Sub Filterliste_Click()
Me.Filter = "Raumnr = " & Me!lFilterliste.Column(0) ' & "'"
Me.FilterOn = True
End Sub
Private Sub KKursraum_AfterUpdate()
Wie muss hier der Code lauten?
Ich hab da schon vieles probiert, aber mir fehlt einfach der richtige Einstieg....
Über Hilfe würde ich mich riesig freuen.
Viele Grüße
Claudia
HAllo,
etwa so (unter der Voraussetzung, dass "Raumnr" den Datentyp Zahl,Long in der Tabelle hat):
Private Sub KKursraum_AfterUpdate()
Me!Filterliste.Rowsource = "SELECT Kurs.Raumnr Kurs.Datum Kurs.Uhrzeit Kurs.Teilnehmer_ID Kurs.Teilnehmer_Nachname Kurs.Teilnehmer_Vorname
FROM Kurs WHERE Raumnr = " & Me!KKursraum
End Sub
/edit/ im folgenden SQL-String fehlten natürlich die Kommata als Trennzeichen in der Select-Feldliste ...
Private Sub Filterzurücksetzen_Click()
Me!Filterliste.Rowsource = "SELECT Kurs.Raumnr , Kurs.Datum , Kurs.Uhrzeit , Kurs.Teilnehmer_ID , Kurs.Teilnehmer_Nachname , Kurs.Teilnehmer_Vorname
FROM Kurs"
End Sub
Hallo,
und vielen Dank.
Ich hab den Code angepasst für Private Sub KKursraum_AfterUpdate() und Private Sub Filterzurücksetzen_Click() und eingefügt. Den Button "Filterzurücksetzen" habe ich ebenfalls erstellt.
Leider funktioniert es nicht. Die Liste erscheint nicht beim Öffen des Formulars und nach dem Filtern mittels den Kombifeldes KKursraum tut sich auch nichts.
Ja, "Raumnr" hat den Datentyp Zahl,Long.
Was läuft falsche?! :-\
Weitere Effekte sind mir gerade aufgefallen.
Wenn ich das Formular zum Filter öffne "Orga_Kurs" stehen in dem Listenfeld "Filterliste" die Feldnamen korrekt in den Spalten (also Raumnr, Urzeit ....)
Wenn ich dann mittels KKursraum (Kombibox) filtere verschwindet alles. Gehe ich dann in die Entwurfsansicht und wieder zurück in die Formularansicht stehen die Daten wie gewünscht im Listenfeld. Klicke ich dann auf "Filter zurücksetzen" wird das Listenfeld gelöscht wie gewünscht samt der "Spaltenüberschriften" bzw. Feldnamen. Wenn die Feldnamen als Spaltenüberschriften so zu sagen fix sein könnten wäre das klasse.
Über hilfreiche Tipps bei der Fehlersuche wäre ich sehr dankbar.
VG
Hallo,
lad die Db hier hoch (gezippt und datenreduziert), dann kann besser nachgesehen werden.
Würde ich gerne, aber das darf ich unter keinen Umständen. Schade.... :'(
Gibt es noch eine andere Möglichkeit?
Hallo,
ZitatWürde ich gerne, aber das darf ich unter keinen Umständen.
man kann eine DB auch anonymisieren. Alle Datensätze löschen und in jede Tabelle 2-3 Speildatensätze anlegen. Zusätzlich kann die DB noch auf die Objekte verkleinert werden, die zur Darstellkung des Problems notwendig sind. Das wäre der übliche Weg für eine Beispieldb.
Es ist nicht meine DB. Ich soll lediglich um die beschriebenen Funktionen erweitern. Das mit den Daten löschen und Test-DS einfügen verstehe ich. Ich bin nicht der Urheber und die DB gehört meinem Arbeitgeber der diese ggf auf höhere Systeme umstellen will und ggf auch vertrieben. Ich denke da ist kein Spielraum für mich, oder?
Schade... >:( Dann gibt es wohl keine Möglichkeit die Ursache der Probleme auf eine andere Art zu finden.
Ich bedanke mich für die sehr gute Hilfe bis hierhin.
Hallo,
Du musst doch für eine Beispieldb an der ursprünglichen DB gar nichts ändern. Erstelle eine neue DB und importiere die Objekte die für die Nachstellung des Problems notwendig sind.
2-3 Spieldatensätze erstellen > komprimieren >Zippen > hochladen
Ach so, ok, ja dann versuche ich mal den relevanten Teil in einer neuen DB so abzuändern, dass "Ursprüngliches" nicht mehr erkennbar ist...
Hoffe es gelingt, dann lade ich hier hoch.
Danke nochmal.... :)
Hallo,
ich habe die Datenbank nun in reduzierter Form angehängt.
Wie schon gesagt, die Filterung klappt nur, wenn man nach der Auswahl mit dem Kombifeld "KKursraum" in den Entwurdmodus geht und dann wieder zurück ?! :-\
Ich habe noch zwei weitere Anliegen/Probleme:
--> Die Kursgebühr soll an den Bericht übergeben werden. Dieser Gebühr wird 'manuell' eingegeben. Wie funktieniert das?
--> Ich finde es unschön, dass die Berichtsnamen so wie die Raumnummer benannt sind. Wie kann ich den Berichten eindeutigere Namen geben, sodass die Anzeige der Daten aus dem gefilterten Listenfeld trotzdem funktieniert?
Hoffe nun, dass das jemand in meine DB rei nschat und mit helfen kann. :)
LG
Claudi
[Anhang gelöscht durch Administrator]
Hallo,
anbei..
[Anhang gelöscht durch Administrator]
Hallo und großes Dankeschön! :) Klappt alles in der Version von DF6GL!
Ich hab nun die Bestandteile in die bestehende DB übernommen. Leider ist es nun wieder so, dass die Filterung erst nach dem Wechsel in den Entwurfsmodus funktioniert. Was ist das für ein Problem? Wo liegt die Ursache?
LG
Ach ja...
beim Kompilieren des VBA-Codes bekomme ich an folgender Stelle beim Aufruf zu den Berichte eine Fehlermeldung:
Private Sub Kursliste_Click()
.....
Err_Befehl_Kursliste:
MsgBox Err.Description
Resume Exit_Befehl_Kursliste ---> Fehlermeldung: "Sprungmarke nicht definiert"
Woran liegt das?
Ich hoffe ihr könnt mir nochmal helfen.
LG
Hallo Claudia,
Da fehlt wohl vor der Error-Sprungmarke noch ein Schnipsel Code,
etwa so:
.
.
Exit_Befehl_Kursliste:
'Code für einen kontrollierten Ausstieg
Exit Sub
Err_Befehl_Kursliste:
hth
gruss ekkehard
Hallo,
ZitatKlappt alles in der Version von DF6GL!
Vorsicht: Ich habe nur
teilweise (für den Bericht_1) die Sache beispielhaft angepasst..... 8)
Du solltest ALLES damit im Zusammenhang Stehende nachsehen (SQL-Strings für das Listenfeld --> fehlende Select-Feld-Trennzeichen -- Kommata-- zusätzliches Teilnehmer_ID-Feld in Spalte 0 etc.. , Aufruf des Berichtes, Übergabe des TextfeldInhaltes an den Bericht mittels Openargs ...)
Schliesslich mußt Du auch noch was zu tun haben... ;)
;) Alles klar.
Na mal sehen ob das mein Problem mit der Anzeige der Filterung nach dem Wechsel in die Entwurfsansicht und zurück löst?!??Zumindest klappt es schon mal unfertig in deiner Version. Das verwirrt....
Das mit den Teilnehmer_ID-Feld in Spalte 0 habe ich nicht ganz verstanden. Es bewirkt dass nur der markierte DS im Listenfeld übergeben wird. Das soll so nicht sein. Sorry, wenn ich mich da falsch ausgedrückt habe. Die eingegebene Gebühr gilt für alle gefilterten Teilnehmer. Also soll diese auf jeder Berichtsseite stehen. Wie wäre hier die Anpassung des Quellcodes? Oder hab ich da was nicht verstanden?
Ich würde mich freuen wenn ihr mir nochmal unter die Arme greifen könnt.
LG
Hallo,
--die Teilnehmer_ID aus der ersten Spalte (Column(0) ) wird im Listenfeld nicht angezeigt, weil ich die Spaltenbreite der ersten Spalte auf 0cm gesetzt habe...
--"Das soll so nicht sein" doch, das soll so sein, weil man in Datenbanken mit den Schlüsselfeldern (hier die Teilnehmer_ID als Primärschlüssel) arbeitet (dringend angeraten..). Column(0) wird benutzt, um den (bzw. die ) Bericht(e) mit dem Datensatz des ausgewählten Teilnehmers zu öffnen
-- Die eingetragene Gebühr wird an den Bericht übergeben (mittels Openargs-Parameter) , unabhängig davon, welchen Listenfeldeintrag man wählt.. Es braucht keine Änderung des Codes.
Du mußt lediglich alle Bericht so aufbauen, wie es beim Bericht_1 gemacht ist.... (Ereignisprozedur "Beim Laden")
Danke für die Erklärung. :)
Ok, dann baue ich die Berichte weiter auf. Vielleicht sehe ich dan klarer?! Es soll die Gebühr eben an alle Teilnehmer gefiltert nach Raum in den jeweiligen Bericht übertragen werden...)
Ein weitere Sache hat sich noch ergeben. Es soll nun auch ein Code übergeben werden -> dreistellige Zahl, Bez. -> "Code_intern".. In dem Formular Orga_Kurse gibt es also ein weiteres Textfeld welches mittels OpenArgs an den Bericht übergeben werden muss.
Wie integriere ich dies korrekt in den bestehenden Code?
Option Compare Database
Private Sub Report_Load()
If Not IsNull(Me.OpenArgs) Then Me!Kursgebuehr = Format(Me.OpenArgs, "#,##0.00 €")
End Sub
Hallo,
bist Du sicher, dass Deine Tabellen vollständig sind, d. h. alle nötigen und benötigten Daten, bzw. Felder enthalten? Vermutlich ist da Nacharbeit angebracht. Solche "zufälligen" Daten, bzw. nicht zugeordnete Daten bringen einen manchmal zu Fall...
1. Möglichkeit der Datenübergabe mehrerer Felder: Den Openargs-Parameter in Form einer Liste mit z. B. dem Semikolon als Trennzeichen beschicken und mittels Split-Funktion in der Load-Ereignisprozedur wieder zerpflücken.
2. Möglichkeit: Im Steuerelementinhalt eines Berichts-Textfeldes auf das (oder halt auch jeweils die) Formular-Textfeld(er) verweisen:
=Forms!Orga_Kurse!Code_intern
Hallo,
danke nochmal, das mit der Anzeige des Textfeldes im Bericht klappt.
Ansonsten habe ich den Fehler noch nicht gefunden, der das Filtern blockiert. Was meinst du mit "zufälligen Daten" genauer?
Die Abfrage enthält alle Daten (und noch ein paar Felder mehr, welche für die Funktionen hier nicht benötigt werden) die in dem Listenfeld stehen sollen und an den Bericht übergeben werden. Also auch mehrere IDs wie Teilnehmer oder Raumnummer oder Kursnummer aus anderen Tabellen. Ich habe die hier hochgeladene DB reduziert und die Tabelle Kurs, auf die sich die verwendete Abfrage bezieht nachgebaut aus anonymisierungs Gründen und um nicht alles nachbauen zu müssen. Ob es nun genau hier harkt, sodass es eben nur im Nachbau funktionieren kann?
So sieht der String für die Abfrage 'Kurs_Abfrage' aus:
SELECT Kurs.Teilnehmer_ID, Trim(Orga.Nachname) AS Nachname, Trim(Orga.Vorname) AS Vorname, PGTD.Nr AS cycle, String(3-Len(PGTD.Nr),'0') & PGTD.Nr AS cycletxt, PGTD.Uhrzeit, PGTE.Nr AS Raumnr, PGTE.level AS levelnname, String(3-Len(PGTE.Nr),'0') & PGTE.Nr AS Raumnrtxt, Kurs.PGT_startoff AS startoff, 10-startoff+2-IIf(startoff<=1,10,0)+10*(PGTD.Nr-1) AS poPGT1
FROM ((Kurs_Abfrage AS AdH INNER JOIN Orga_Teilnehmer AS Orga ON Kurs.Lfdnr = Orga.Lfdnr) LEFT JOIN PGT_leveln AS PGTE ON Kurs.PGT_level = PGTE.level_ID) LEFT JOIN PGT_startoff AS PGTD ON Kurs.PGT_cycle = PGTD.cycle_ID
WHERE (((Kurs.Info)=4));
Ich hoffe ihr könnte mir nochmal Hinweise geben.
LG
Claudia
Hallo,
Zitat
Die Abfrage enthält alle Daten (und noch ein paar Felder mehr, welche für die Funktionen hier nicht benötigt werden) die in dem Listenfeld stehen sollen und an den Bericht übergeben werden.
Das siehst Du hier aber ziemlich falsch.. :o An den Bericht sollen keine Einzeldaten aus den Spalten eines Listenfeldes übergeben werden, die wiederum aus verschiedenen Tabellen und ominösen Berechnungen stammen, sondern nur die ID bzw. ein passendes Kriterium für den/die betroffenen Datensätze (als Where-Condition-Parameter bei Aufruf des Berichtes mittes der OpenReport-Methode. Berechnungen und Gruppierungen/Sortierungen werden grundsätzlich im Bericht erledigt. Die Berichtsabfrage enthält
nur als Select-Liste die Felder aus den passend verknüpften Tabellen (wobei ich meistens das "Sternchen" hernehme ,weil ich mich dann nicht mehr um diese Abfrage kümmern muss, wenn mal ein Feld in irgendeiner Tabelle hinzukommt)
Übernahme von Daten aus Formular-Textfeldern ist allenfalls quick&dirty und nur im Einzelfall für statische Daten (z. B.: für eine Überschrift) brauchbar.
Ok,
Es klappt nun, dass der richtige Bericht über das Kombifeld KKursraum aufgerufen wird.
Nun fehlt noch die Filterung der Daten nach dem Kursraum "Raumnr" (1-5). Es gibt für jeden Kursraum einen Bericht wegen der unerschiedlichen Kursinhalte.
Dann muss also nun beim Laden des Berichts die Filterung erfolgen.
Also beim öffnen des Berichts:
Private Sub Kursliste_Click() ??[/color]
Dim stDocName As String
stDocName = Bericht_" & Me!KKursraum
DoCmd.OpenReport stDocName, acPreview
End Sub
ODER
Beim Laden des Berichts
Private Sub Report_Load() ??[/b]
ODER
Geht das auch einzustellen im Eingenschaftsblatt des Berichts unter Daten, dann Filter?
Und wie muss ist der Code des Befehls dann?
Ich hoffe ich kann das nochmal so direkt erfragen, denn ich bin Änfänger und froh über jeden Tipp. Ich komme so einfach nicht weiter.... :-[
So, endlich mal was alleine hinbekommen. Wenn auch nur was "Kleines"...
So klappts mit der 'Übergabe' der gefilterten Daten in den Bericht.
Private Sub Kursliste_Click()
Dim stDocName As String
stDocName = "Bericht_" & Me!KKursraum 'Berichtname
DoCmd.OpenReport stDocName, acPreview, , "[Raumnr]='" & Me!KKursraum & "'"
End Sub
Zwei Fragen habe ich nun dennoch:
1) Wie kann ich die Berichte mit den gefilterten Daten direkt als pdf an den Ablageort der Datenbank speichern? Ohne den Weg, sich den Bericht erst anzeigen zu lassen und dann als pdf zu drucken.
2) Es wird geplant Multiple-Choice Abschlusstest zu erstellen, welche für Auswertungen mittels einer OMR Software eingescananntwerden sollen. Meine Frage hierzu ist, wie man Daten aus Access direkt in Word oder PDF Felder (FDF Tookit?! ???) übergeben kann? Es geht hierbei darum eine Lösung für eine bzw. mehrere feste Formatvorlagen zu finden damit die Test scannbar sind.
Hoffe ihr könnt mir hierzu Tipps geben.
Evtl. Fragen als neue Themen?
LG
Claudia
Hallo,
1) wenn Du A2007/A2010 hast, kann
DoCmd.OutputTo acOutputReport, "Bericht_1", acFormatPDF, "c:\Bericht_1.pdf"
helfen (siehe VBA-Hilfe)
2) Wozu Word oder Übergabe an PDF-Felder? Generiere den Report so, dass er dem bestimmten Layout genügt. Die Einscan-Software muss dann in der Lage sein, eingescannte Texte an bestimmten Stellen auf dem Papier entspr. (Daten-)Feldern zuzuweisen und das Ganze als CSV-Datei exportieren zu können, die wiederum in Access importiert wird.
Hallo,
vielen Dank.
Ja, habe A2010 und 2007.
zu 1)
Wie lässt sich der vorgeschlagene VBA Code...
DoCmd.OutputTo acOutputReport, "Bericht_1", acFormatPDF, "c:\Bericht_1.pdf
In den schon vorhandenen Code integrieren, sodass die Auswahl der verschiedenen Berichte über das Kombifeld erhalten bleibt?
Private Sub Kursliste_Click()
Dim stDocName As String
stDocName = "Bericht_" & Me!KKursraum
DoCmd.OpenReport stDocName, acPreview, , "[Raumnr]='" & Me!KKursraum & "'"
' DoCmd.OutputTo acOutputReport, "Bericht_", acFormatPDF, "c:\Bericht_.pdf" -> gibt so eine Fehlermeldung[/b][/i]
End Sub
2) Warum gefilterte Daten in Word oder PDF...
Weil bei dieser feste Formatvorlage die Kopf- und Fußzeile bei allen Tests gleich sein soll und somit mit nur einem OMR-Template alles gescannt werden kann (nur Kopf und Fuß werden gescannt). Das lässt sich z.B. in Word realisieren. Der Mittelteil kann so von den Testerstellen individuell gestaltet werden, was notwendig ist. In Access-Berichten in der Entwurfsansicht kann mal was verrutschen beim Formatieren... Oder?!
Hallo,
erstell für jeden Bericht eine (gespeicherte) Abfrage ("abf_Bericht_X") . "X" ist die "Berichtsnummer"..
Private Sub Kursliste_Click()
Dim stDocName As String, strSQL as String
strSQL=" Select * from tblTabellexYZ Where [Raumnr]='" & Me!KKursraum & "'" 'stellvertretend für Deine "Kurs_Abfrage"
stDocName = "abf_Bericht_" & Me!KKursraum
Currentdb.Querydefs(stDocName).SQL = strSQL
DoCmd.OutputTo acOutputReport, "Bericht_" & Me!KKursraum , acFormatPDF, "c:\Bericht_" & Me!KKursraum & ".pdf"
End Sub
Dankeschön! :)
Bekomme nur leider an folgender Stelle einFehlermeldung -> Laufzeilenfehler 3265 "Element in dieser Auflistung nicht gefunden"
CurrentDb.QueryDefs(stDocName).SQL = strSQL
Warum das?
:-\
Hallo Claudia,
ZitatLaufzeilenfehler 3265 "Element in dieser Auflistung nicht gefunden"
Da steht ein Feldname in strSQL, der nicht in der Tabelle/Abfrage
existiert. Vergleiche die Feldnamen.
hth
gruss ekkehard
Dankeschön... :)
Ich habe mir nochmal alles angeguckt und keinen Fehler gefunden soweit ?! ???
Kann es auch daran liegen, dass ich die Kursgebühr dann nicht an den Bericht übergeben kann. Diese wird einfach in ein Textfeld im Access-Formular eingegeben und und bisher über die Eigenschaft des entsprechenden Textfelder im Bericht angezeigt:
=[Formulare]![Orga_Kurse]![Kursgebuehr]
Die Kursgebühr soll nun einfach als Text und nicht als Währung behandelt werden für andere Berechnungen...
Ich würde mich freuen wenn ihr mir nochmal helfen könnt.
LG
Claudia
Hallo,
die Fehlermeldung deutet darauf hin, dass es keine Abfrage gibt entspr. dem Inhalt von "stDocName"
Aber die Abfrage gibt es doch schon. Sonst würde das Aufrufen der Access-Berichte ja nicht funktionieren über die Variante die bereits exsistiert. Oder muss ich extra für diese Funktion (Drucken des Berichts als pdf) nochmal eine Identische Abfrage mit anderem Namen erstellen?
Die exsistente Abfrage enthält neben den für die Berichte verwendeten Daten noch weitere Felder. Aber das stört nicht bei der bereits funtionierenden Funktion bei der der Bericht aufgerufen wird.
Was verstehe ich also nicht bzw. wo könnte der Fehler liegen neben dem von euch schon genannten?
Und das mit dem Anzeigen der Kursgebühr als Text, welches in der Eigenschaft des Berichtsfeldes geregelt wird (siehe meine vorherige Frage) wird auch beim Drucken direkt ins pdf funktionieren? Oder gibt es da noch etwasd zu bedenken?
Hmm, hoffe ihr könnt mir weiterhelfen. :)
Hallo,
nochmal: gibt es eine Abfrage, die entspr. dem akt. Inhalt (Haltepunkt setzen und nachsehen!) der Variablen "stDocName" heißt (z. B. "abf_Bericht_1") und die dem Bericht "Bericht_1" in seiner Datenherkunft zugewiesen ist?
Das gilt sinngemäß für alle Berichte, die mit dem Kombi "Me!KKursraum" bearbeitet werden.
Die Übernahme sollte funktionieren....Wenn nicht, gibt es andere Möglichkeiten (z. B. Formular-Textfeld-Verweis (oder besser gleich den Wert aus dem Textfeld) in die SQL der Abfrage einbauen und ein Berichtsfeld daran binden) .
Ja, gibt es!!!
Problem ungelöst, was das drucken direkt ins pdf angeht...
Hallo,
dann lad halt die Db nochmal hier hoch...
ok, muss ich vorbereiten.
Hoffe ich schaffe das noch heute, sonst gehts bei mir spätestens nächste Woche weiter.
LG und vielen Dank :)
Asche auf mein Haupt... Und es lag ja doch an den Abfrage ::)
Es geht klappt nun also! :)
1) Nur, dass leider immer alle Daten im Bericht also im pdf-Duck angezeigt werden und nicht die nach Raum gefilternten.[/b] Was klappt hier nicht, sodass die Filterung im Bericht nicht funktioniert?
Hab alles so auf gebaut wie von DF6GL aufgezeigt, wie folgt:
Private Sub Kursliste_Click()
Dim stDocName As String, strSQL as String
strSQL=" Select * from tblTabellexYZ Where [Raumnr]='" & Me!KKursraum & "'" 'stellvertretend für Deine "Kurs_Abfrage"
stDocName = "abf_Bericht_" & Me!KKursraum
Currentdb.Querydefs(stDocName).SQL = strSQL
DoCmd.OutputTo acOutputReport, "Bericht_" & Me!KKursraum , acFormatPDF, "c:\Bericht_" & Me!KKursraum & ".pdf"
End Sub
2) Nun soll es so sein, dass die pdf-Berichte immer am Speicherort der Datei abgelegt werden sollen. Ich hab hierfür mal folgendes versucht:
DoCmd.OutputTo acOutputReport, "Bericht_" & Me!KKursraum, acFormatPDF, CurrentProject.Path & Me!KKursraum & ".pdf" ---> Effekt: die Datei wird so benannt wie der Order in dem die DB liegt und eine "Dateiablageebene" darüber abgelegt. Auch ungefiltert, siehe Problem unter 1) beschrieben.
Wie kann ich die Datei auf der Ebene der DB ablegen und mit folgender Dateibenennung "Raumnr_Kursnr_Datum"?
Freue mich über hilfreiche Tipps. :)
LG
Claudia
Hallo,
1)
"strSQL=" Select * from tblTabellexYZ Where [Raumnr]='" & Me!KKursraum & "'" 'stellvertretend für Deine "Kurs_Abfrage"
Das Rote mußt Du durch den eigentlichen SQL-String Deiner Abfrage ersetzen!
2)
Also das solltest Du selber jetzt hinbekommen ( den String für den Dateinamen zusammenzusetzen) .... :o
ZitatWie kann ich die Datei auf der Ebene der DB ablegen und mit folgender Dateibenennung "Raumnr_Kursnr_Datum"?"
Wirklich so? Oder eher doch so: C:\MeineDb\1_1_25.09.2012.pdf
Woher kommt (Wo steht)
KursNr?
Ist
Datum das "heutige" (akt.) Datum?
DoCmd.OutputTo acOutputReport, "Bericht_" & Me!KKursraum, acFormatPDF, CurrentProject.Path & "\" & Me!KKursraum & "_" & Me!KursNr & Format(Date, "\_dd.mm.yyyy") & ".pdf"
Hallo DF6GL,
vielen Dank für die hilfreichen Tipps.
Zu deinem letzten Beitrag (September 25, 2012, 19:00:05)...
...1) Sorry, ich hatte natürlich bereits an der Stelle Select * from tblTabellexYZ den SQL-Code entsprechend angepasst. War ein "copy-paste-Fehle" von mir bei der Beitragserstellung hier :-\
...2) Ablage des PDFs und Benennung klappt :)
Beschreibung aktuelles Problem:
Ich habe das Problem mit der Filterung der Datensätze bei der Generierung des PDFs leider noch nicht gelöst. Es werden immer alle Datensätze ohne Filterung nach der Raumnummer im PDF gedruckt. Allerdings ist es so, wenn ich mir zunächst die Berichte in Access anzeigen lasse mittels der Prozedur "Private Sub Kursliste_Click"() und dann die Fuktion zur "Private Sub pdf_Kursliste_Click()" bei geöffnetem Bericht in Access anwende, dann funktioniert die Filterung und das PDF wird korrekt generiert.
Was klappt da nicht? Ich hoffe ihr habt einen passenden Tipp für mich.
Viele Grüße
Claudia
Hallo liebe Access-Profis,
leider konnte ich mein Problem, siehe meinen vorherigen Betrag und hier nochmals gepostet noch nicht lösen.
Ich würde mich sehr freuen, wenn ihr mir nochmal helfen könnt...
Beschreibung aktuelles Problem:
Ich habe das Problem mit der Filterung der Datensätze bei der Generierung des PDFs leider noch nicht gelöst. Es werden immer alle Datensätze ohne Filterung nach der Raumnummer im PDF gedruckt. Allerdings ist es so, wenn ich mir zunächst die Berichte in Access anzeigen lasse mittels der Prozedur "Private Sub Kursliste_Click"() und dann die Fuktion zur "Private Sub pdf_Kursliste_Click()" bei geöffnetem Bericht in Access anwende, dann funktioniert die Filterung und das PDF wird korrekt generiert.
Wo könnte der Fehler sein?
LG
Claudia
Hallo,
verrat halt mal den Code der Prozedur pdf_Kursliste_Click() ....
oder lad die DB hier hoch, wie vorher schon empfohlen...
Du kannst auch mal einen Haltepunkt in die Prozedur setzen und im Einzelschritt die Inhalte der Variablen und den Codeablauf überprüfen...
Sorry, hier der Code...
Private Sub pdf_Kursliste_Click()
Dim stDocName As String, strSQL As String
strSQL = "SELECT Tblxy.Var1, Tblxy.Var2, Tblxy.Var3, Tblxy.Var4, Tblxy.Var5, Tblxy.Var6 FROM Tblxy Where [Raumnr]='" & Me!Var1 & "'"
stDocName = "abf_Kursliste_" & Me!Var2 'Var2=Kursnummer
CurrentDb.QueryDefs(stDocName).SQL = strSQL
DoCmd.OutputTo acOutputReport, "Kursliste_" & Me!Var2, acFormatPDF, CurrentProject.Path & "\Kursliste-" & Me!Var2 & "_" & "Raum-" & Me!Var1 & Format(Date, "\_yyyy-mm-dd") & ".pdf"
End Sub
Würde mich über Tipps freuen.
Hallo,
???
entspricht
strSQL = "SELECT Tblxy.Var1, Tblxy.Var2, Tblxy.Var3, Tblxy.Var4, Tblxy.Var5, Tblxy.Var6 FROM Tblxy Where [Raumnr]='" & Me!Var1 & "'"
tatsächlich der realen Tabellensituation?
Ist in der Datenherkunft des Berichtes (Kursliste_" & Me!Var2)
wirklich der Text aus der Variablen stDocName (abf_Kursliste_" & Me!Var2 )
eingesetzt?
Lad das Ding doch mal hoch, sonst stochern wir immer weiter im Nebel herum .....
Ok, muss ich noch heute abend vorbereiten mit dem hochladen.
Ich hab die Variablen einfach anonymisiert...
Hatte den Code gemäß deinem Vorschlag aufgebaut und unten noch die Dateibenennung und Ablage verändert :
Private Sub Kursliste_Click()
Dim stDocName As String, strSQL as String
strSQL=" Select * from tblTabellexYZ Where [Raumnr]='" & Me!KKursraum & "'" 'stellvertretend für Deine "Kurs_Abfrage"
stDocName = "abf_Bericht_" & Me!KKursraum
Currentdb.Querydefs(stDocName).SQL = strSQL
DoCmd.OutputTo acOutputReport, "Bericht_" & Me!KKursraum , acFormatPDF, "c:\Bericht_" & Me!KKursraum & ".pdf"
End Sub
Ich sollte hierfür Abfragen 'abf_Bericht_' für jeden der Berichte für die Kurslisten generieren.
Hallo,
ja....
aber der SQL-String ("Select * from tblTabellexYZ .....") und die weitere Benamsung muss doch Deinen Gegebenheiten entsprechen....
Prinzip ist doch so:
Einem bestimmten Bericht wird eine bestimmte Abfrage in seiner Datenherkunft zugewiesen.
Diese bestimmte Abfrage erhält per VBA in der entspr. "Druck-Prozedur" den passenden(!) und mit Kriterien versehenen SQL-String in ihrer Eigenschaft "SQL" zugewiesen.
Der bestimmte Bericht benutzt dann bei der Ausgabe (Drucken, PDF-Erzeugung ) die Abfrage in seiner Datenherkunft, der ja vorher der passende SQL-String mit den Kriterien verpasst wurde....
Insofern kannst Du für den PDF-Druck denselben Code wie für den Ausdruck (falls der richtig funktioniert) benutzen, es wird lediglich Outputto mit acFormatPDF zur Generierung der PDF-Datei benutzt.
Hallo,
ja, wer suchet der findet... ;) Danke nochmal...
Für alle, die ein ähnliches Problem lösen wollen... So funktioniert nun meine Filterung einer Abfrage für einen Bericht mittels mehrer Kombinationsfilter. Der Bericht wird als pdf am Speicherort der DB abgelegt:
Private Sub Kursliste_pdf_Click()
On Error GoTo fehler
Dim stDocName As String, strSQL As String
If IsNull(KomiboxAuswahl1) Or IsNull(KomiboxAuswahl2) Or IsNull(KomiboxAuswahl3) Then GoTo fehler
strSQL = "SELECT TblKurs.Raumnr, .....u.s.w.... FROM TblKurs Where [Raumnr]='" & Me!KomiboxAuswahl1 & "'"
stDocName = "abf_Kursliste_" & Me!KomiboxAuswahl2
CurrentDb.QueryDefs(stDocName).SQL = strSQL
DoCmd.OutputTo acOutputReport, "Kursliste_" & Me!KomiboxAuswahl2, acFormatPDF, CurrentProject.Path & "\Kursliste-" & Me!KomiboxAuswahl2 & "_" & "Raum-" & Me!KomiboxAuswahl1 & Format(Date, "\_yyyy-mm-dd") & ".pdf"
ende:
Exit Sub
fehler:
MsgBox "Text für Fehlermeldung"
Resume ende
End Sub
.... soviel erstmal zu dieser Baustelle....
VG
Hallo nochmal,
nun habe ich zu einr neuen Aufgabenstellung eine Frage.
Aufgabe:
Es sollen Ersatzlisten als pdfs generiert werden. Bei diesen Bögen soll immer nur die Raumnummer im Bericht eingetagen sein. Die sonst ausgefüllten Berichtsfelder wie "Nachname, "Vorname" etc... sollen leer bleiben, damit die Infos handschriftlich auf den Listen eingetragen werden können.
Nun würde ich aber gerne die bereits erstellten Berichte verwenden und diese über ein Kombifeld auf dem Formular auswählen. Soweit gut. Aber wie bekommt man es hin, dass die Berichtsfelder nicht automatisch durch die in der Datenquelle angegebene Abfrage gefüllt werden (Die Datenquelle kann ich ja nicht herausnehmen wegen der anderen Prozeduren, die funktionieren müssen)? Ich möchte nun aber nicht nochmals identische Berichte generieren nur um Blanko-Ersatzlisten erstellen zu können.
Ich würde mich freuen wenn mir jemand gute Tipps hierzu geben kann?
LG
Claudia
Hallo,
eine Möglichkeit:
strSQL = "SELECT TblKurs.Raumnr, NULL as Vorname, NULL as Nachname ,.....u.s.w.... FROM TblKurs Where [Raumnr]='" & Me!KomiboxAuswahl1 & "'"
Hallo,
leider klappt es bei mir nicht mit dem Vorschlag wie oberhalb beschrieben. Ich erhalte folgende Fehlermeldung: 3265 "Element in dieser Auflistung nicht gefunden."
Angemarkter wird folgender Code CurrentDb.QueryDefs(stDocName).SQL = strSQL
Code insgesamt:
Private Sub Ersatz_Kursliste_Click()
'On Error GoTo fehler
Dim stDocName As String, strSQL As String
strSQL = "SELECT NULL as Raumnr, NULL as Var2, NULL as Var3, NULL as Var4, NULL as Var5, NULL as Var6 FROM TblKurs"
' → Eine Where-Condition wird nicht benötigt. Die Berichte werden intern im Bericht bezeichnet ,,Kurs Kommunikation" oder ,,Kurs Verhandlung" etc...
stDocName = "Kurs_" & Me!Combobox_ ersatz
' → Combobox_ersatz enthält die Kursnummern; Berichtsbenennung Kurs_1; Kurs_2 etc bis Kurs_7; Über die Raumnummer soll kein Bezug genommen werden bei den Ersatzbögen. Das soll per Hand nachgetragen werden können.
CurrentDb.QueryDefs(stDocName).SQL = strSQL
DoCmd.OutputTo acOutputReport, "Kurs_" & Me!Combobox_ersatz, acFormatPDF, CurrentProject.Path & "\Kursnummer-" & Me!Combobox_ersatz & "_" & "Ersatzliste-" & Format(Date, "\_yyyy-mm-dd") & ".pdf"
'ende:
' Exit Sub
'fehler:
' MsgBox "Bitte wählen Sie eine Kursnummer aus!"
' Resume ende
'fehler:
End Sub
--> Wo steckt hier der Fehler?
Ich möchte eben nicht nur für diese benötigten Vorlagen jetzt noch wieder neue Berichte erstellen. Ich hoffe es gibt eine Möglichkeit?
Ich wäre über eure hilfreichen Tipps sehr dankbar.
VG
Claudia
Hallo,
Die Fehlermeldung sagt aus , dass es entspr. dem Ergebnis des Ausdrucks
"Kurs_" & Me!Combobox_ ersatz
als Abfrage nicht gibt.....
Hallo,
stimmt da war ein Fehler. Dankeschön. Ich habs geändert. Jetzt funktioniert die Filterung leider noch nicht. Es werden alle Daten aus der Abfrage "abf_Kurs_" in den Bericht gedruckt. Dabei soll eben nichts eingetragen sein.
Idealerweise würde ich die Anzahl der in PDFs "zu druckenden" Ersatzbögen in einem zweiten Feld eingeben.
Was klappt da bei Filtern noch nicht?
Wie kann ich das einbauen mit der Anzahl der Blankoseiten?
Hab mir dazu mal folgendes vorbereitet:
....
Dim ..u.s.w. Counter As Integer, anzahl_ersatzdruck As Integer
....u.s.w.
CurrentDb.QueryDefs(stDocName).SQL = strSQL
If Me!anzahl_ersatzdruck > 0 Then GoTo ersatzliste_druck Else GoTo error_druck
ersatzliste_druck:
anzahl_ersatzdruck = Me!anzahl_ersatzdruck
For Counter = 1 To anzahl_ersatzdruck
DoCmd.OutputTo acOutputReport, "Kurs_" & Me!Combobox_ersatz, acFormatPDF, CurrentProject.Path & "\Kursnummer-" & Me!Combobox_ersatz & "_" & "Ersatzliste-" & Format(Date, "\_yyyy-mm-dd") & ".pdf"
Next Counter
error_druck: ... usw.
....
Macht der Code Sinn? ---> Macht keinen Sinn. (claudia2324 17.10.2012)
Da die Filterung z.Z. nicht gelingt, wird nun alles "zigfach" gedruckt... :-[
Ich würde mich über Tipps freuen.
VG
Hallo,
ZitatEs sollen Ersatzlisten als pdfs generiert werden. Bei diesen Bögen soll immer nur die Raumnummer im Bericht eingetagen sein. Die sonst ausgefüllten Berichtsfelder wie "Nachname, "Vorname" etc... sollen leer bleiben, damit die Infos handschriftlich auf den Listen eingetragen werden können.
Da muss halt dieser Bericht richtig aufgebaut sein..(Datenherkunft, bzw. Abfrage)
ZitatIdealerweise würde ich die Anzahl der in PDFs "zu druckenden" Ersatzbögen in einem zweiten Feld eingeben.
Ich versteh die Hintergründe nicht (mehr). Welche "Anzahl" meinst Du, und wovon hängt die ab?
Wie auch immer, mehrfache Kopien desselben Berichtes könnten mit Docmd.PrintOut (siehe VBA-Hilfe) erstellt werden.
Hallo,
Sorry, das mit der Übergabe der Raumnummer an den Bericht hatte sich inzwischen erledigt. Soll so nicht sein.
...
strSQL = "SELECT NULL as Raumnr, NULL as Var2, NULL as Var3, NULL as Var4, NULL as Var5, NULL as Var6 FROM TblKurs"
' → Eine Where-Condition wird nicht benötigt. Die Berichte werden intern im Bericht bezeichnet ,,Kurs Kommunikation" oder ,,Kurs Verhandlung" etc... [/b]
Zum Hintergurd:
Es gibt ein neues Textfeld im Formular in dem ich die Anzahl der zu generierenden Ersatzlisten eingetragen werden soll. Die eingegebene Anzahl der Seiten soll dann in dem Befehl "
Private Sub Ersatz_Kursliste_Click()" mitverarbeitet werden (siehe mein vorbereiteter Code "ersatzliste_druck:)" .
Also der Anwender wählt eine Kursnummer aus und gibt die Anzahl der Kopien an (Textfeld "anzahl_ersatzdruck"). zB ein möchte ein Schulungsleiter noch 20 Ersatzbögen haben. Dann kann er sich diese generieren und die Datei ausdrucken.
Hmm, nur leider klappt das, ich nenne es mal 'Zurücksetzten' der Filterung nicht ganz korrekt (SELECT NULL as Raumnr usw....)?? Die Ersatzbögen sind zwar leer, aber werden dennoch 100 mal an den Bericht übergeben. Also 100 Seiten im PDF, weil die Abfrage zum Bericht so viele Datensätze enthält. Diese 100 Seiten werden dann 20 mal ins PDF "gedruckt".
Na ja, ich schätze mal, das mill dann jetzt keiner mehr im Dateil wissen. :-[ Oder kann mir doch nocht jemand helfen? :)
VG
Hallo,
es fällt halt schwer, Deine Gedankengänge nach zu vollziehen.
Wenn der Bericht keine Datensätze enthalten soll, so muss die WHERE-Condition entsprechend (auf False) gesetzt werden und nicht die Select-Liste mit NULL gefüllt werden....
z. B. Select ... Where 1=2
Hallo,
schade, dass meine Beschreibungen nicht ausreichen um das Problem verständlich darzustellen. Zumindest nicht ausreichen ums mit wenig Leseaufwand schnell zu verstehen.
Ich versuche meine Frage nochmal anders zu formulieren:
-> Aufgabe ist die Generierung von "Blanko"-Kurslisten. Diese sollen als pdf gespeichert werden. Die Anzahl der zu druckenden Seiten soll in einem Textfeld angegeben werden können. Also ein pdf mit zB 20 Blanko-Kurslisten.
Wie kann ich die Datensatzquelle (Abfrage) in einem Bericht für eine bestimmte Anwendung "deaktivieren"? An anderer Stelle wird die Datensatzquelle für diesen Bericht benötigt. Oder geht kein Weg daran vorbei neue Berichte zu generieren (in diesem Fall kopieren und Datensatzquelle Entfernen sowie vernüpfte Felder im Bericht)?
-> Den Tipp mit der Where Condition auf False mit zB Select ... Where 1=2 verstehe ich leider nicht.
Wie müsste die vba Syntax aussehen? Bzw. wäre ich über eine etwas ausführlichere Erklärung dankbar.
VG
Claudia
Hallo,
kannst Du nicht mal das Ding hochladen?
und statt einer Beschreibung des Berichtes eine Skizze anfertigen (z. B. mit Word) , wie dieser "Blanko"-Bericht aussehen soll ?
Wenn es für einen Bericht keine Daten(sätze) gibt, weil z. B. die Abfrage in der Datenherkunft des Berichtes keine Datensätze liefert
(--> .... Where 1=2 Erklärung: 1=2 ergibt Falsch , somit werden keine Datensätze geliefert) , werden auch keine "Zeilen" (gebundene Felder) im Bericht angezeigt. Lediglich die mit statischen Daten oder über z. B. Formular-Textfeld-Verweise "gefüllten" werden angezeigt/gedruckt.
Wenn trotzdem eine gewisse Anzahl an "Blanko"-Feldern erscheinen soll, ist eine entspr. Anzahl von separaten Textfeldern (oder auch Rechtecken) vonnöten, die die "fehlenden" Datenfelder simulieren.
Ein solcher Bericht dient dann als Ausdruck auf Papier nur zum manuellen Ausfüllen/Erfassen von Daten wie ein vorgedrucktes leeres Formular im herkömmlichen Sinn.
Soll heißen, ein "Blanko"-Bericht kann nicht beides erledigen: Ausdruck gespeicherter Daten und Ausdruck als leeres (Erfassungs-)Formular, sofern mehrere Datensätze im Spiel sind.
Hallo,
und vielen Dank erstmal für die gute Erläuterung :)
Folgender String bringt nun den gewünschten Effekt:
strSQL = "SELECT TblKurs.Raumnr, TblKurs.Var2, TblKurs.Var3, TblKurs.Var4, TblKurs.Var5,TblKurs.Var6 FROM TblKurs Where 1=2"[/i]
--> Zum Glück konnte ich es so in den Berichten einrichten, dass zu jedem Feld die Feldüberschrift steht. Die Felder habe ich auf einfache Art unterstrichen. Im ausgedruckten Bericht sieht das auf dem Blankos top aus. Die fehlenden Daten lassen sich per Hand unter den Feldüberschriften und auf dem Unterstrich nachtragen.
Ich möchte es nun mit einer Fragestellung nochmal ohne erneutet Hochladen der Datenbank versuchen.
Wie kann ich nun die Anzahl der vorher in ein Textfeld eingegebenen Wiederholungsseiten bzw. Exemplare für die Ausgabe in ein PDF in ggf. nach Möglichkeit folgenden vba-Code integrieren?
DoCmd.OutputTo acOutputReport, "Kurs_" & Me!Combobox_ersatz, acFormatPDF, CurrentProject.Path & "\Kursnummer-" & Me!Combobox_ersatz & "_" & "Ersatzliste-" & Format(Date, "\_yyyy-mm-dd") & ".pdf"[/color]
In das Textfeld "anzahl_ersatzdruck" sollen voher die Anzahl der gewüschten Exemplare eigegeben werden, die als Wiederholungsseiten in ein pdf-Dokument ausgegeben werden sollen.
Ich komme mit meinen bisherigen Versuchen leider nicht weiter....
z.B.:
...
Dim Exemplare As Integer
...
Exemplare = Me!anzahl_ersatzdruck
DoCmd.PrintOut Exemplare ....??? .... ---> Befehl an Drucker. So funktieniert es nicht für die Ausgabe in ein PDF. Wie gehts???
Ich hoffe ihr könnt mir nochmal helfen.
VG
Claudia
Hallo,
ist doch alles schon erzählt worden...
SELECT TblKurs.Raumnr, TblKurs.Var2, TblKurs.Var3, TblKurs.Var4, TblKurs.Var5,TblKurs.Var6 FROM TblKurs Where 1=2
muss als Abfrage oder SQL-String in der Datenherkunft des Berichtes stehen. (Diese Abfrage liefert KEINE Datensätze, so dass die Berichtsfelder, die an die Abfrage-Spalten gebunden sind, leer bleiben)
Im (In den) Bericht(en) müssen sonstige Felder, die sich z. B. auf ein Formularfeld beziehen , den Verweis auf das Textfeld in ihrem Steuerelementinhalt aufweisen.
Der Code zum Mehrfachausdruck (Kopieen) sieht dann so aus:
Sub btnKopieenDrucken_Clic()
Docmd.Openreport "Kurs_" & Me!Combobox_ersatz, acPreview
DoCmd.Printout acPrintAll , , , , nz(Me!anzahl_ersatzdruck,1)
Docmd.Close acReport, "Bericht_" & Me!Combobox_ersatz
End Sub
(Ich denke mal, dass ich die aktuellen Namen der Objekte richtig herausgelesen habe... )
Hallo,
vielen Dank.
Mit diesem Code wir der Bericht direkt an den Drucker geschickt. Es soll aber in ein PDF am Speicherort der Datenbank gespeichert werden. Kann das funktionieren???
---
Wie kann ich nun die Anzahl der vorher in ein Textfeld eingegebenen Wiederholungsseiten bzw. Exemplare für die Ausgabe in ein PDF in ggf. nach Möglichkeit folgenden vba-Code integrieren?
DoCmd.OutputTo acOutputReport, "Kurs_" & Me!Combobox_ersatz, acFormatPDF, CurrentProject.Path & "\Kursnummer-" & Me!Combobox_ersatz & "_" & "Ersatzliste-" & Format(Date, "\_yyyy-mm-dd") & ".pdf"[/color[/i]]
----
???
VG
Claudia
Hallo,
.
.
.
Dim i as long
For i = 1 to nz(Me!anzahl_ersatzdruck,1)
DoCmd.OutputTo acOutputReport, "Kurs_" & Me!Combobox_ersatz, acFormatPDF, CurrentProject.Path & "\Kursnummer-" & Me!Combobox_ersatz & "_" & "Ersatzliste-" & Format(Date, "\_yyyy-mm-dd") & ".pdf"
Next
.
.
.
Hallo,
danke! :)
Jetzt läuft die For-Schleife entsprechend der Eingabe in das Textfeld "anzahl_ersatzdruck" durch, aber zum Schluss ist nur eine Seite im pdf und nicht die gewünschte Anzahl der Exemplare.
Was fehlt noch? ???
LG
Claudia
Hallo,
es wird ja immer dieselbe PDF-Datei erzeugt, d. h. die vorhergehende überschrieben. Der BERICHT hat ja keine Mehrfachseiten, es wird der einseitige Bericht x-mal in dieselbe PDF-Datei geschrieben. Insofern sollte der PDF-Dateiname noch um den Schleifen-Laufwert ergänzt werden. Z. B.:
DoCmd.OutputTo acOutputReport, "Kurs_" & Me!Combobox_ersatz, acFormatPDF, CurrentProject.Path & "\Kursnummer-" & Me!Combobox_ersatz & "_" & "Ersatzliste-" & Format(Date, "\_yyyy-mm-dd\-") & i & ".pdf"
Um in EINER PDF-Datei mehrere Exemplare (d. h. aber genauer mehrere Seiten ) zu generieren , muss der Bericht selber mehrseitig sein .
Das ist auch zu erreichen, indem Du eine weitere Tabelle ("tblLfNr") mit nur einer Spalte ("LfNr"), in der eine fortlaufende Nummer (von 1 bis 100) hinterlegt wird, erzeugst und die Berichtsabfrage etwa so änderst:
strSQL = "SELECT TblKurs.Raumnr, TblKurs.Var2, TblKurs.Var3, TblKurs.Var4, TblKurs.Var5,TblKurs.Var6 FROM TblKurs , tblLfNr" & _
" Where 1=2 and LfNr <= " & nz(Me!anzahl_ersatzdruck,1)
(Wie gehabt diesen SQL-String der Berichtsabfrage zuweisen. Die Schleife um Outputto entfällt dann, weil der Bericht EINMAL als PDF gespeichert wird. Der Bericht selber erzeugt die "Kopieen")
Ich frage mich indessen, warum denn nun eine PDF-Datei mit mehreren identischen Seiten überhaupt erzeugt werden soll. Wenn jemand mehrere Druckkopien einer Berichtsseite (Blankoformular) benötigt, kann er doch selber die "PDF-Datei mit nur einer Seite" durch Einstellen der Kopienanzahl im PDF-Reader-Druckdialog ausdrucken.. ???
Hallo,
vielen Dank für die sehr gute Erklärung. :)
Ich habe nun die Tabelle TblKurs erstellt mit nur einer Spalte LfNr mit Werten von 1 bis 100.
Leider erhalte ich immer noch nur eine Seite im PDF anstatt der gewünschten Anzahl an Exemplaren in dem einen PDF.
Was ist noch falsch bzw. habe ich noch nicht ausßreichend verstanden?
Hier mal meine Codeanpassung, falls der Fehler hierdrin steckt.
Private Sub Ersatz_Kursliste_Click()
Dim stDocName As String, anzahl_ersatzdruck As Integer, strSQL As String
strSQL = "SELECT TblKurs.Raumnr, TblKurs.Var2, TblKurs.Var3, TblKurs.Var4, TblKurs.Var5,TblKurs.Var6 FROM TblKurs , tblLfNr" & _
" Where 1=2 and LfNr <= " & nz(Me!anzahl_ersatzdruck,1)
stDocName = "abf_Kurs_" & Me!Combobox_ersatz
CurrentDb.QueryDefs(stDocName).SQL = strSQL
DoCmd.OutputTo acOutputReport, "Kurs_" & Me!Combobox_ersatz, acFormatPDF, CurrentProject.Path & "\Kursnummer-" & Me!Combobox_ersatz & "_" & "Ersatzliste-" & Format(Date, "\_yyyy-mm-dd") & ".pdf"
End Sub
Wäre um Hilfe sehr dankbar.
VG
Hi,
wenn die Frage auf die Anzahl der Druckkopien abzielt, so kann man die per VBA dem zu druckenden Bericht mitgeben in der auf
http://www.access-programmers.co.uk/forums/showthread.php?t=231177 (http://www.access-programmers.co.uk/forums/showthread.php?t=231177)
beschriebenen Weise. In diesem Fall ist "intCopies" auf den gewünschten Wert zu setzen.
Harald
Hallo,
@bahasu: Ob die Einstellung der Printer-Eigenschaften auch bei der Ausgabe in eine PDF-Datei funktioniert, stelle ich jetzt erst mal dahin. (Müßte ich erst mal austesten ;) )
ZitatIch habe nun die Tabelle TblKurs erstellt mit nur einer Spalte LfNr mit Werten von 1 bis 100.
denke mal, dass es sich um einen Schreibfehler handelt..
Ja, da ist noch ein logischer Fehler drin, weil ja gar kein DS von der Kurs-Tabelle geliefert werden soll. Also auf folgende Weise:
Private Sub Ersatz_Kursliste_Click()
Dim stDocName As String,
anzahl_ersatzdruck As Integer, strSQL As String
strSQL = "SELECT Null as Raumnr, Null as Var2, Null as Var3, Null as Var4, Null as Var5, Null as Var6 FROM tblLfNr " & _
" LfNr <= " & nz(Me!anzahl_ersatzdruck,1)
stDocName = "abf_Kurs_" & Me!Combobox_ersatz
CurrentDb.QueryDefs(stDocName).SQL = strSQL
DoCmd.OutputTo acOutputReport, "Kurs_" & Me!Combobox_ersatz, acFormatPDF, CurrentProject.Path & "\Kursnummer-" & Me!Combobox_ersatz & "_" & "Ersatzliste-" & Format(Date, "\_yyyy-mm-dd") & ".pdf"
End Sub
Trotzdem nochmal die Frage: WARUM in EINER PDF-Datei mehrfache Seiten desselben Inhaltes?
Hi Franz,
Zitat von: DF6GL am Oktober 17, 2012, 18:14:59
@bahasu: Ob die Einstellung der Printer-Eigenschaften auch bei der Ausgabe in eine PDF-Datei funktioniert, stelle ich jetzt erst mal dahin. (Müßte ich erst mal austesten ;) )
hatte ich heute getestet: Als ich das erstellte pdf zum Drucker schicken wollte, sah ich bei der "Anzahl Exemplare" die von mir vorgebene Zahl.
Geht auch bei .xps.
Harald
Hallo,
ok, gut zu wissen.
Das heißt demnach, das sich in der PDF-Datei ( oder xps-Datei) (bei unserem Threat-Thema) eine Seite des Berichtes befindet und lediglich im Druckdialog die Kopieenanzahl entspr. eingesetzt wird.
Hallo,
oh, die letze Disakussion gibt mir Hoffnung das mein Vorhaben klappen kann. :)
Frage von DF6GL:
Zitat
Trotzdem nochmal die Frage: WARUM in EINER PDF-Datei mehrfache Seiten desselben Inhaltes?
[/size]
--> Die pdf-Datei mit den Blankos soll auch ggf. bei Bedarf an größeren Mengen von Blankos an eine Druckerei übergeben werden. Es ginge natürlich auch, die Druckerei damit zu beauftragen ein Dokument x-mal auszudrucken!!, aber so soll es nun mal gehandhabt werden! :-[ Ist nicht meine Entscheidung...Leider bin ich noch nicht so fit, als dass ich es nun trotz vielfacher Versuche hinbekomme, den Vorschlag von bahasu
Zitatwenn die Frage auf die Anzahl der Druckkopien abzielt, so kann man die per VBA dem zu druckenden Bericht mitgeben in der auf
http://www.access-programmers.co.uk/forums/showthread.php?t=231177
beschriebenen Weise. In diesem Fall ist "intCopies" auf den gewünschten Wert zu setzen.
[/size] korrekt in meinen Code zu integrieren. Oder mit Anderen Worten...
Zitat....im Druckdialog die Kopieenanzahl entspr. eingesetzt wird.
... entsprechend umzusetzen???
Tja, was nun, was tun... :-[ Ich setzte mich weiter damit auseinander, aber wäre um Unterstützung was den Quellcode angeht nach wie vor dankbar... :)
LG
Claudia
Hallo Claudia,
Zitat von: claudia2324 am Oktober 18, 2012, 15:57:22
--> Die pdf-Datei mit den Blankos soll auch ggf. bei Bedarf an größeren Mengen von Blankos an eine Druckerei übergeben werden. Es ginge natürlich auch, die Druckerei damit zu beauftragen ein Dokument x-mal auszudrucken!!, aber so soll es nun mal gehandhabt werden! :-[ Ist nicht meine Entscheidung...
Bei dem Stichwort "Druckerei" sei die Frage erlaubt, wie umfangreich die Druckauflage sein soll.
Der Hintergrund dieser Frage ist, dass microsoft die in Frage kommende Variable zwar als Integer deklariert hat, man aber von der maximalen Zahl (ca. 32000 ) nur 999 real eintragen kann. >:(
Ist das noch akzeptabel?
Zitat
wäre um Unterstützung was den Quellcode angeht nach wie vor dankbar... :)
Wenn das obige ok ist, werde ich gerne ein Beispiel + Hinweise mitteilen.
Harald
Hallo Harald,
vielen Dank für deine Antwort.
Zu der Frage nach der Druckmenge... Es werden für die größte Veranstaltung c.a. um die 100 Blankos benötigt geschätzt nach Anzahl kurzfristiger Teilnehmer. Problem war eben, dass die Vertrags-Druckerei das schon "verdödelt hat" und dann musste während der Veranstaltung einige Bögen auf anderen Druckern gedruckt weden, was danach Probleme beim einscannen gab (Auswertung der Bögen erfolgt elektronisch mit einer OMR Software). Wenn die Datei mit der korrekten Anzhal der PFDs direkt an die Druckerei gegeben wird, sollte das nicht mehr passieren.
bahasu :
ZitatWenn das obige ok ist, werde ich gerne ein Beispiel + Hinweise mitteilen.
Ich wäre dankbar, wenn ich ein Beispiel mit Hinweisen mitgeteilt bekommen kann.
Claudia
Hallo Claudia,
1. Mache eine Sicherungskopie Deiner Datenbank
2. die runtergeladene Datei entzippen
3. Das Modul ,,Modul_Druckerparameter" in Deine Datenbank importieren
4. Beim Aufruf Deines Berichtes eine Zeile hinzufügen:
Call Printer_Anzahl("Bericht1", Me.Anzahl) ' diese Zeile bitte einfügen
DoCmd.OpenReport "Bericht1", acPreview, , , , True
5. Ersetze "Bericht1" durch den Namen Deines Berichtes
6. Ersetze Me.Anzahl durch einen Zahlenwert oder eine Konstante oder ein Steuerelement, das die Anzahl vorgibt
Das Formular ,,Formular1" diente zum Testen: Anzahl wird im ungebundenen Steuerelement vorgegeben.
Nach Speichern wird der Bericht aufgerufen, in dessen Eigenschaft die Anzahl hinterlegt wurde.
HTH
Harald
[Anhang gelöscht durch Administrator]
Hallo,
vielen Dank für die Hilfe. :)
Nun habe ich alles wie vorgegeben umgesetzt und erhalte leider immer noch nur ein Durckexemplar in der PDF-Datei anstatt der gewünschten Anzahl.
Wo steckt der Fehler?
Hier mal mein jetziger Code:
[color=blue]Private Sub Ersatz_Kursliste_Click()
Dim stDocName As String, anzahl_ersatzdruck As Integer, strSQL As String
strSQL = "SELECT TblKurs.Raumnr, TblKurs.Var2, TblKurs.Var3, TblKurs.Var4, TblKurs.Var5,TblKurs.Var6 FROM TblKurs Where 1=2"
stDocName = "abf_Kurs_" & Me!Combobox_ersatz
CurrentDb.QueryDefs(stDocName).SQL = strSQL
Call Printer_Anzahl(Kurs_" & Me!Combobox_ersatz, Me.anzahl_ersatzdruck)
DoCmd.OutputTo acOutputReport, "Kurs_" & Me!Combobox_ersatz, acFormatPDF, CurrentProject.Path & "\Kursnummer-" & Me!Combobox_ersatz & "_" & "Ersatzliste-" & Format(Date, "\_yyyy-mm-dd") & ".pdf"
End Sub[/color]
- Aus einer Auswahl mehrerer Berichte wird der gewünschte über eine ComboBox ausgewählt.
- An die Blanko-Berichte sollen keine Datensätze übergeben werden.
Ich hoffe ihr könnt mirhelfen.
VG
Claudia
Hi Claudia,
Du hast Recht, mit dem DoCmd.OutputTo wird die Anzahl nicht übergeben.
Ist es bei Dir machbar, dass Du in der Berichtsvorschau
1. Seite einrichten aufrufst
2. Im Register "Seite" den "Speziellen Drucker" markierst
3. und dann bei "Drucker" einen "PDF"-Driver (sofern vorhanden) aussuchst? (Das waren meine Testbedingungen, bei denen im pdf-File die Anzahl drin war)
Harald
Hallo,
meine Befürchtung:
ZitatOb die Einstellung der Printer-Eigenschaften auch bei der Ausgabe in eine PDF-Datei funktioniert, stelle ich jetzt erst mal dahin. (Müßte ich erst mal austesten
kristallisiert sich nicht als unbegründet heraus.. Die Verwertung der "Anzahl Kopiien" im Druckdialog hängt vom (PDF-) Treiber ab. Bei einem Test konnte ich nur bei den PDF-Druckern "Adobe PDF", "soft Xpansion Perfect PDF 6"
nicht aber bei "Expert PDF", "Freepdf" , "Nitro PDF Creator", "PDFCreator","EasyPDF Printer 4"
die entspr. Anzahl Seiten generieren. (Erhebt keinen Anspruch auf Vollständigkeit.)
ZitatWenn die Datei mit der korrekten Anzhal der PFDs direkt an die Druckerei gegeben wird, sollte das nicht mehr passieren.
Das beutet ja nur das Austreiben des Teufels mit Beelzebub..
Würde eher einen Bericht so trimmen, dass er beim (evtl. erforderlichen ) Ausdruck annähernd exakt mit den gedruckten (PDF-) Formularen übereinstimmt .
Gravierende Druckerunterschiede sollte es eigentlich nicht geben, wenn z. B. die Seitenränder an den "worst case" -Fall angepasst werde, d. h. so groß eingestellt sind, dass Druckereinschränkungen in dieser Beziehung nicht zum Tragen kommen.
Hallo,
ich habe Adobe Pro Version 9 oder FreePDF im Einsatz. Normal verwendet ich den Free-PDF-Drucker.
Das stimmt wohl mit dem Teufel und dem Belzebub ;)
Das mit dem trimmen der Berichtsformate ist definitiv noch eine Aufgabe!
Trotzdem würde es mich jetzt noch interessieren, wie ich meinen Adobe PDF-Treiber korrekt ansprechen kann? Scheint ja, als wenn es damit funktionieren müsste. ZitatBei einem Test konnte ich nur bei den PDF-Druckern "Adobe PDF", ....die entspr. Anzahl Seiten generieren. ...
...nur um die Aufgabe technisch gelöst zu haben...
VG Claudia
Hallo,
setz vor der Druckgeschichte den Drucker mit der Application.Printer-Eigenschaft auf den passenden PDF-Drucker..
Moin Claudia,
anbei ein Versuch mit "DoCmd.OutputTo acOutputReport", das eine bestimmte Anzahl von Seiten in der pdf generiert.
In der Tabelle sind ein paar "Spiel"-Felder, die für das Leerformular verwendet werden.
Es gibt einen Datensatz, bei dem das Feld Leer auf Ja gesetzt ist.
Die zweite Tabelle gibt die Anzahl der Drucke wieder und müsste noch auf die maximale Anzahl erweitert werden.
Im Formular wird die Anzahl eingetragen und das Generieren der Datei gestartet.
Es entsteht eine Datei Test.pdf, die die vorgegebene Anzahl Seiten hat.
Funktioniert unter WIN XP, access 2007.
Harald
[Anhang gelöscht durch Administrator]
Hallo,
und vielen Dank für die super Tipps und das Beispiel :)
Wie kann ich denn in die Abfrage zu den Berichten eine weitere Zeile einfügen, die keinen Datensatz enthäht? Wie kann ich die Spalte "leer" an eine Abfrage anfügen und nur den letzten zusätlich angefügten Leer-Datensatz auf "true" setzen?
Ich hoffe das klappt auch unter Access 2010...
Würde mich über Hilfe freuen :)
VG
Claudia
Hi Claudia,
1. in Deiner Tabellen-Struktur ein neues Feld eintragen:
Name: Leer vom Typ Ja/Nein
2. In der Tabelle (geht an dieser Stelle zur Not auch mal ohne Formular: aber bitte mich für diese Äußerung nicht steinigen ;D} dann einen neuen Datensatz anlegen, in dem nur bei Leer ein Häckchen gesetzt wird. {Dient als Hilfsmittel, dass nachher für das Leer-Formular etwas gedruckt werden kann, ohne dass Inhalten zum Namen oder was auch immer erscheinen}
3. Zur Abfrage: Wenn Du dort statt mit einzelnen Feldern mit "*" gearbeitet hast, sollte es bereits erledigt sein
Wenn Du dort alle Felder einzeln aufgeführt hast, dann bitte das Feld "Leer" in die Abfrage mit einbauen
Harald
Hallo,
also, ich versteh jetzt nur Bahnhof.. :o
Zitat von: DF6GL am Oktober 23, 2012, 14:56:24
Hallo,
also, ich versteh jetzt nur Bahnhof.. :o
Sorry, ich war wohl zu schnell auf den Speichern Knopf gekommen.
Hoffe, dass es jetzt klarer ist.
Hallo,
ich meinte nicht Dich damit, Harald... ;)
Ich versteh den fett gedruckten Satz nicht...
Hallo,
danke :), ...ist die Methode die mir bekannt ist...
Zitatich meinte nicht Dich damit, Harald... Zwinkernd
Hmm, ich dachte mal es gibt nur merkwürdige Antworten aber keine dummen Fragen. Aber natürlich Unverständliches... Bin eben ein Anfänger... :-[
Lässt sich das ganze unter 1. und 2.
Zitatbahasu: Datum/Zeit: Heute um 13:51:15
auch mit Code automatisieren?
Sodass erst die, ich nenne Sie mal "Mastertabelle" befüllt wird (in dem Fall wird *.txt importiert) und die Kurs- und Raumzuteilung sowie Teilnehmer-ID-Vergabe abgeschlossen wird. Erst danach, wenn klar ist wie viele Teilnehmer es sind etc und die bei jedem Durchgang neu generierte Teilnhemer-ID steht, können auch die Kursbögen generiert werden.
Also wenn das jetzt wieder zu "unverständlich" ist, kann ich das gut verstehen. Ich denke ich kann dieses Thema dann auch abschließen. Dann ist es eben so, dass nur ein Blonkobogen problemlos generiert werden kann, was wie ich finde schon super ist.
Ich danke euch. :)
VG
Claudia
Hallo Claudia,
naja, das Thema ist doch, eine gewisse Anzahl "Blankobögen" (von denen (mir) nur bekannt ist, dass ein leerer Datensatz mit ein paar anderen statischen Werten aus einem Formular darauf pro Seite zu stehen kommen soll) in eine einzige PDF-Datei zu drucken. Die Anzahl bedingt sich nicht aus der Anzahl Datensätze aus der Tabelle/Abfrage, sondern durch einen manuell eingegebenen Wert in einem Formular-Textfeld.
Dann (und auch sonst) ist mir dieses:
ZitatWie kann ich die Spalte "leer" an eine Abfrage anfügen und nur den letzten zusätlich angefügten Leer-Datensatz auf "true" setzen?
nicht klar, was damit im Allgemeinen und im Besonderen gemeint ist....
Außerdem ist der altenative "Lösungsweg" über eine hier hochgeladene Demo-Version Deiner DB im Sande verlaufen...
Hallo,
Zitat
Außerdem ist der altenative "Lösungsweg" über eine hier hochgeladene Demo-Version Deiner DB im Sande verlaufen...
--> Ich habe das Ding übergeben bekommen und es programmiert da gerade noch ein Zweiter dran rum. Zudem sind einige Module ziemlich Komplex bzw. "ominös" wie du mal eine gepostete SQL-Abfrage betitelt hattest... Das ganze ist so verstrickt, dass es mir schwer fällt das ganze nachzubauen und bis ins Dateil zu verstehen. Da gibts viele gestrickte SQL-Abfragen auf die ich aufbauen muss. Die Tabellen selbst werden durch hochladen oder "reinkopieren" befüllt. Da will ich nix direkt an den Tabelle "verschlimmbessern". Darum habe ich das nicht mehr gemacht...
Also meine Frage...
ZitatLässt sich das ganze unter 1. und 2.
Zitat
bahasu: Datum/Zeit: Heute um 13:51:15
auch mit Code automatisieren?
Sodass erst die, ich nenne Sie mal "Mastertabelle" befüllt wird (in dem Fall wird *.txt importiert) und die Kurs- und Raumzuteilung sowie Teilnehmer-ID-Vergabe abgeschlossen wird. Erst danach, wenn klar ist wie viele Teilnehmer es sind etc und die bei jedem Durchgang neu generierte Teilnhemer-ID steht, können auch die Kursbögen generiert werden.
steht noch, aber ich verstehe es schon, wenns jetzt mal gut ist. Wie gesagt, es ist klasse, dass es mit der Blankogenrierung in ein pdf generell funktioniert.
VG
Claudia
Hi,
Zitat von: claudia2324 am Oktober 23, 2012, 16:50:51
Lässt sich das ganze unter 1. und 2.
Zitat
bahasu: Datum/Zeit: Heute um 13:51:15
auch mit Code automatisieren?
im Prinzip ist das Ändern der Tabellenstruktur auch per VBA möglich.
siehe https://groups.google.com/forum/?fromgroups#!topic/microsoft.public.de.access/uovzzECW2Y4 (https://groups.google.com/forum/?fromgroups#!topic/microsoft.public.de.access/uovzzECW2Y4)
Wobei ich bei aller "Liebe" zur Programmierei hier doch die manuelle Änderung (d.h.
einmalig ein Feld zur Tabellenstruktur hinzufügen und
einmalig in einem neuen Datensatz im Feld "Leer" eine Haken zu setzen) stark bevorzugen würde {VBA würde ich für diesen Zweck nur bei Wiederholungsaktionen verwenden, und die sehe ich hier nicht}.
Nachdem die externen Tabellen in die Datenbank hereingebracht wurden, können sie per Anfügeabfrage an die eigentliche Tabelle angehängt werden. Somit ist kein mehrmaliges Anpassen der Tabellenstruktur notwendig.
Harald
Vielen Dank euch nochmal für die tolle Hilfe! Jetzt weiß ich, wie ich es technisch lösen kann und an welcher Stelle es an der Umsetzung klemmt. :) Meine Kollegen, die die Anwendung nutzen werden, wissen nicht, wie sie eine Tabelle in Access manipulieren können...
Wenn ich die Berichte mit Datensätzen an den "pdf-Druck" übergeben möchte, stört der leere Datensatz. Zumindest müsste ich den dann wieder manuall rausnehmen oder mit Code eliminieren. Also bei dieser Anwendung umständlich...
Das mit dem trimmen der Berichte ist definitiv noch eine Aufgabe, bei der ich mich gerne wieder mit euch beraten möchte... Also bis ganz bald...
VG
Claudia