Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Listenfeld mittels Kombifeld filtern

Begonnen von claudia2324, September 18, 2012, 17:01:04

⏪ vorheriges - nächstes ⏩

DF6GL

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.

claudia2324

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

claudia2324

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

DF6GL

Hallo,

eine Möglichkeit:

strSQL = "SELECT TblKurs.Raumnr, NULL as Vorname, NULL as Nachname ,.....u.s.w.... FROM TblKurs Where [Raumnr]='" & Me!KomiboxAuswahl1 & "'"


claudia2324

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

DF6GL

Hallo,



Die Fehlermeldung sagt aus , dass es entspr. dem Ergebnis des Ausdrucks

"Kurs_" & Me!Combobox_ ersatz


als Abfrage nicht gibt.....

claudia2324

#51
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

DF6GL

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.

claudia2324

#53
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

DF6GL

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


claudia2324

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



DF6GL

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.

claudia2324

#57
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

DF6GL

#58
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... )

claudia2324

#59
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