Hallo liebe Access-Experten,
ich kommt nicht weiter bei der Sortierung eine SQL-Abfrage mittels VBA beim Druck von personalisierten Bewertungsbögen für Interviews mit Studenten.
Ich habe diese DB angehängt mit Testdatensätzen.
Die Sortierung soll so sein, dass erst nach ausgewählte Station (Listenfeld K2) aufsteigend, dann nsch Durchgang aufsteigend und dann nach Etage aufsteigend sortiert wird.
In der Abfrage selbst lässt sich dass wohl nicht lösen, da die Auswahl der Station auf dem Formular "Sort_Seriendruckliste" entscheidend ist.
Mein Codeversuch sieht so aus:
strSQL = "SELECT INT_Bewertungsboegen.Etagennr, INT_Bewertungsboegen.Durchgangtxt, INT_Bewertungsboegen.AdH_ID, INT_Bewertungsboegen.Startstation, INT_Bewertungsboegen.Nachname, INT_Bewertungsboegen.Vorname FROM INT_Bewertungsboegen Where [Etagennr]=' & Me!K1 [ORDER BY Me!K2 [ASC][,Bewertungsboegen.Etagennr [ASC]][,Durchgangtxt (ASC]]]"
-> klappt aber leider nicht. Erhalte dann die vogesehende Fehlermeldung der MsgBox.
Ich soll heute Abend ableifern, also dringend...
Ich hoffe ihr könnt mir helfen. :)
Viele Grüße
Claudia
[Anhang gelöscht durch Administrator]
Hab schon gesehen... "Bewertungsboegen.Durchgangtxt " ... Aber das macht es auch nicht besser... ???
Hallo,
ohne jetzt die Db angesehen zu haben, gilt allgemein: Gruppierungen und Sortierungen müssen (sollen) im Bericht selber (Entwurf/Gruppieren und sortieren) erfolgen. Die Einstellungen in Berichts- Abfragen werden in den meisten Fällen ignoriert und sollten dort gar nicht auftauchen.
Zudem ist die SQL in der Order-Klausel ziemlich verkorkst und sollte so lauten, wenn überhaupt:
strSQL = "SELECT INT_Bewertungsboegen.Etagennr, INT_Bewertungsboegen.Durchgangtxt, INT_Bewertungsboegen.AdH_ID, INT_Bewertungsboegen.Startstation, INT_Bewertungsboegen.Nachname, INT_Bewertungsboegen.Vorname FROM INT_Bewertungsboegen Where [Etagennr]=" & Me!K1 & " ORDER BY Etagennr ASC, Durchgangtxt ASC"
Hi,
[ORDER BY Me!K2
was soll [ vor dem obigen Ausdruck?
Da accb-Datei kann ich diese nicht untersuchen. mdb vergößert den Kreis der Hilfeanbieter.
Harald
Hallo,
und wie bekomme ich es per VBA hin, dass die im Formular ausgewählte Station -> Listenfeld K2 als erstes aufsteigend sortiert wird?
Hoffe ihr könnt mir nochmal helfen :)
VG
Hier ist mdb
[Anhang gelöscht durch Administrator]
Hallo,
Du kannst nur nach den Feldern sortieren/gruppieren, die auch in der Datenherkunft des Berichtes vorhanden sind..
"die im Formular ausgewählte Station -> Listenfeld K2 als erstes aufsteigend sortiert wird"
wenn eine solche Station ausgewählt und in der Abfrage als Kriterium benutzt wird, warum soll danach sortiert werden?
Oder ich versteh die Situation falsch.
Erklär mal genauer anhand der DB, wo und wie die Berichte gewählt und aufgerufen (Formular, Code, Ereignis??) werden und welche Kriterien für genau einen solchen Bericht (Name??) gelten müssen.
Hi,
mdb geladen: ok
Sortieren nach einem Feld kann ich mir noch vorstellen,
aber sortieren nach dem Inhalt eines Feldes verstehe ich nicht. :(
Da es Berichte 1 bis 7 gibt und auch 7 Inhalte bei K2 vermute ich: Ist statt Sortieren die Auswahl eines Berichtes gemeint?
Harald
PS Oder ist statt Sortieren SELEKTIEREN gemeint? {aber dann dürfte die Reihenfolge der Auswahl keine Rolle spielen ??? )
Hallo DF6GL,
vielen Dank für den Hinweis.
Vor lauter Aufregung in die falsche Richtung gestrampelt... :-[
An jedem Bericht hängt einer Abfrage mit der die Daten wie die Etagennr, Vorname, Nachname etc gefiltert werden, ich musste hier jetzt einfach die entsprechende Station hinzufügen und dann mit ORDER BY nach Etagennr und Durchgang aufsteigend sortieren.
Ich hoffe, dass damit alles richtig ist...
VG
Claudia
Naja, dann öffne die Berichte und stelle dort mit dem beschriebenen Vorgang die Sortierung ein und NICHT in der Abfrage...
Ja, da klappt auch was nicht...
und WAS??
Moment...
Ich raffe da gerade was noch nicht...
Ich muss doch nicht nach der Station sortieren (also siehe Abfrage "Int_Bewertungsbögen", wenn es nun einen Bericht pro Station gibt...
Es geht jetzt einfach darum, dass die als PDF gedruckten Bewertungsbögen in der korrekten vorgegebenen Reihenfolge gedruckt werden können, damit der Juror die Berichte dann in der richtigen Reihenfolge auf dem Tisch liegen hat. Also eigentlich nach Durchgang... ?!
Ich muss da nochmal den Kollegen fragen!
Wo kann ich die Sortierung im Bericht selbst manipulieren? ???
VG
Hallo,
ich hab mal eine Excel-Tabelle angehägt (generiert aus der Abfrage "Int_Bewertungsbögen") in der man die korrekte Sortierung sieht (Früher wurde das mit Word-Serienbriefen gelöst...). So habe ich das übergeben bekommen.
Es geht jetzt einfach darum, dass die als PDF gedruckten Bewertungsbögen in der korrekten vorgegebenen Reihenfolge gedruckt werden können, damit der Juror die Berichte dann in der richtigen Reihenfolge auf dem Tisch liegen hat.
Sortierung erst nach entsprechender Station hier "Station1", dann nach "Durchgangtxt" und dann nach "Etagennr".
Das habe ich noch nicht in der DB gelöst.
- In meiner Formular zum Drucken der personalisierten Bögen wähle ich die Etage (Listenfeld "K1"), die Stationsnummer (Listenfeld "K2") und die Juror-Kennung (Listenfeld "K3") aus.
- Pro Station gibt es einen Bericht mit einer dazugehörigen Abfrage
- Per VBA werden dann die Daten aus den Berichtsabfragen in den Bericht als PDF gedruckt (das PDF wird per BVA an den Ablageort der DB gelegt)
Private Sub Blanko_Pruefb_pdf_Click() ' Genrierung eines Blanko-Bewertungsbogens als PDF-Datei
Dim stDocName As String, strSQL As String
If IsNull(Me!Kblanko) Then GoTo MyErr Else GoTo Prüfung
Prüfung:
If Me!Kblanko = "5_Schreibblatt-Motivation" Then GoTo SchreibblattBlanko Else GoTo Blanko_Pruefb_pdf
SchreibblattBlanko:
strSQL = "SELECT INT_Bewertungsboegen.Etagennr, INT_Bewertungsboegen.Durchgangtxt, INT_Bewertungsboegen.AdH_ID, INT_Bewertungsboegen.Startstation, INT_Bewertungsboegen.Nachname, INT_Bewertungsboegen.Vorname FROM INT_Bewertungsboegen Where 1=2"
stDocName = "abf_Station_" & Me!Kblanko
CurrentDb.QueryDefs(stDocName).SQL = strSQL
'DoCmd.OpenReport "Station_" & Me!Kblanko, acViewReport
DoCmd.OutputTo acOutputReport, "Station_" & Me!Kblanko, acFormatPDF, CurrentProject.Path & "\Station-" & Me!Kblanko & "_" & "Blanko" & Format(Date, "\_yyyy-mm-dd") & ".pdf"
Exit Sub
Blanko_Pruefb_pdf:
strSQL = "SELECT INT_Bewertungsboegen.Etagennr, INT_Bewertungsboegen.Durchgangtxt, INT_Bewertungsboegen.AdH_ID, INT_Bewertungsboegen.Startstation, INT_Bewertungsboegen.Nachname, INT_Bewertungsboegen.Vorname FROM INT_Bewertungsboegen Where 1=2"
stDocName = "abf_Station_" & Me!Kblanko
CurrentDb.QueryDefs(stDocName).SQL = strSQL
DoCmd.OutputTo acOutputReport, "Station_" & Me!Kblanko, acFormatPDF, CurrentProject.Path & "\Station-" & Me!Kblanko & "_" & "Blanko" & Format(Date, "\_yyyy-mm-dd") & ".pdf"
Exit Sub
MyErr:
MsgBox "Bitte wählen Sie eine Prüfstation aus der vorgegebenen Werteliste aus! Ggf. geöffnete PDF-Dateien schließen."
Exit Sub
End Sub
Die Hürde ist nun wohl, dass ja nach Auswahl einer Stationsnummer über das Listenfeld "K2" entsprechend korrekt sortiert wird.
Ich muss wohl doch meine Abfragen pro Bericht erweitern, oder?
Ich hoffe meine Erläuerungwar verständlicher?
Ich bin dankbar für weitere Hilfe.
VG
Claudia
[Anhang gelöscht durch Administrator]
Hallo,
und WO steht denn diese ominöse Reihenfolge??
Zitat
Es geht jetzt einfach darum, dass die als PDF gedruckten Bewertungsbögen in der korrekten vorgegebenen Reihenfolge gedruckt werden können, damit der Juror die Berichte dann in der richtigen Reihenfolge auf dem Tisch liegen hat.
Zitat"Sortierung erst nach entsprechender Station hier "Station1", dann nach "Durchgangtxt" und dann nach "Etagennr".
Wenn dein Bericht nach "Station" (z. B. Bericht "Station_1" ) ausgewählt wird, dann gibt es nur diese eine Station im Bericht und demzufolge gibt es nicht danach zu sortieren (wie vorher schon gesagt). Dein Code druckt auch nur den (einzigen) Bericht, der sich aus der Angabe im Form-Steuerelement "Kblanko" ergibt.
Wenn ich das nun richtig verstehe, willst Du alle Berichte (Station_1 bis Station_7 ) in der Reihenfolge ihrer Nummer im Namen nacheinender ausdrucken.
Wenn das so ist, mußt Du das mit einer Schleife lösen, die eben alle Berichte durchläuft und nacheinander ausdruckt.
Ich möchte, dass die Sortierung pro Druck einer Station (das soll so bleiben, damit jeder Juror pro Station und Etage seinen Packen Bewertungsbögen bekommt) so wie vorgegeben und in der angehängten Tabelle zu sehen ist, sortiert wird.
Ich weiß nicht, wie ich das noch besser beschreiben soll ???
Zitat
Wenn dein Bericht nach "Station" (z. B. Bericht "Station_1" ) ausgewählt wird, dann gibt es nur diese eine Station im Bericht und demzufolge gibt es nicht danach zu sortieren (wie vorher schon gesagt).
Aber wenn man sich die Abfrage "Int_Bewertungsbögen" bzw. die Tabelle "Sortierung_HM-INT_Bewertungsbögen.xls" ansieht, sieht man, dass für jede Station, z.b. Station1 Nummerierungen von 1 bis 50 vergeben wurden. Diese müssen aufsteigend sortiert werden. Sonst stimmt die Reihenfolge nicht. Wenn man nur nach Durchgang und Etage sortiert, stimmt die Reihenfolge nicht.
Macht es Sinn die VBA Codezeile zum SQL-String so zu erweiter?
strSQL = "SELECT INT_Bewertungsboegen.Station1, INT_Bewertungsboegen.Station2, INT_Bewertungsboegen.Station3, INT_Bewertungsboegen.Station4, INT_Bewertungsboegen.Station5, INT_Bewertungsboegen.Station6, INT_Bewertungsboegen.Station7, INT_Bewertungsboegen.Station8, INT_Bewertungsboegen.Station9,INT_Bewertungsboegen.Station10, INT_Bewertungsboegen.Etagennr, INT_Bewertungsboegen.Durchgangtxt, INT_Bewertungsboegen.AdH_ID, INT_Bewertungsboegen.Startstation, INT_Bewertungsboegen.Nachname, INT_Bewertungsboegen.Vorname FROM INT_Bewertungsboegen Where [Etagennr]='" & Me!K1 & "'"... und dann im Bericht zu filtern? Ich weiß nur leider nicht, wie das geht...
Hoffe auf Hilfe.
VG
Hallo,
ausgehend von diesem Code, der EINEN Bericht für EINE Etage(nnummer) , jedoch mit allen dort befindlichen Stationen druckt, soll dieser so erweitert werden, dass für ALLE Etagen(nummern) die jeweiligen Berichte sortiert nach der Etagennummer gedruckt werden.
Private Sub Pruefb_pdf_Click() ' Genrierung der personalisierten Bewertungsbogens als PDF-Datei
'On Error GoTo MyErr
Dim stDocName As String, strSQL As String
If IsNull(K1) Or IsNull(K2) Or IsNull(K3) Then GoTo MyErr Else GoTo Prüfung
Prüfung:
If Not IsNull(K1) And Not IsNull(K2) And Me!K2 = "5_Schreibblatt-Motivation" Then GoTo SchreibblattMotivationDruck Else GoTo Pruefb_pdf
SchreibblattMotivationDruck:
strSQL = "SELECT INT_Bewertungsboegen.Etagennr, INT_Bewertungsboegen.Durchgangtxt, INT_Bewertungsboegen.AdH_ID, INT_Bewertungsboegen.Startstation, INT_Bewertungsboegen.Nachname, INT_Bewertungsboegen.Vorname FROM INT_Bewertungsboegen Where [Etagennr]=" & Me!K1 & " ORDER BY Etagennr ASC, Durchgangtxt ASC"
stDocName = "abf_Station_" & Me!K2
CurrentDb.QueryDefs(stDocName).SQL = strSQL
DoCmd.OutputTo acOutputReport, "Station_" & Me!K2, acFormatPDF, CurrentProject.Path & "\Station-" & Me!K2 & "_" & "Etage-" & Me!K1 & "_" & "Juror-" & Me!K3 & Format(Date, "\_yyyy-mm-dd") & ".pdf" 'Ablage der pdf-Datei am Speicherort der Datenbank
Exit Sub
Pruefb_pdf:
'strSQL = "SELECT INT_Bewertungsboegen.Etagennr, INT_Bewertungsboegen.Durchgangtxt, INT_Bewertungsboegen.AdH_ID, INT_Bewertungsboegen.Startstation, INT_Bewertungsboegen.Nachname, INT_Bewertungsboegen.Vorname FROM INT_Bewertungsboegen Where [Etagennr]='" & Me!K1 & "'"
strSQL = "SELECT INT_Bewertungsboegen.Etagennr, INT_Bewertungsboegen.Durchgangtxt, INT_Bewertungsboegen.AdH_ID, INT_Bewertungsboegen.Startstation, INT_Bewertungsboegen.Nachname, INT_Bewertungsboegen.Vorname FROM INT_Bewertungsboegen Where [Etagennr]=" & Me!K1 & " ORDER BY Me!K2 ASC, Etagennr ASC, Durchgangtxt ASC"
stDocName = "abf_Station_" & Me!K2
CurrentDb.QueryDefs(stDocName).SQL = strSQL
DoCmd.OutputTo acOutputReport, "Station_" & Me!K2, acFormatPDF, CurrentProject.Path & "\Station-" & Me!K2 & "_" & "Etage-" & Me!K1 & "_" & "Juror-" & Me!K3 & Format(Date, "\_yyyy-mm-dd") & ".pdf" 'Ablage der pdf-Datei am Speicherort der Datenbank
Exit Sub
MyErr:
MsgBox "Bitte zuerst die JID generieren! Ggf. geöffnete PDF-Dateien schließen."
Exit Sub
End Sub
Ist das so korrekt?
Hier der Vorschlag dazu:
Private Sub Alle_Pruefb_pdf_Click() ' Generierung der personalisierten Bewertungsbögen als PDF-Datei
'On Error GoTo MyErr
Dim stDocName As String, strSQL As String, StnNr as Long, JurNr as String
Dim rs As Dao.Recordset
Set rs=Currentdb.Openrecordset("Select distinct Etagennr from INT_Bewertungsboegen order by Etagennr",dbOpenSnapshot)
If rs.Recordcount > 0 Then
Do until rs.EOF
For StnNr = 1 to 10 'alle Stationen durchlaufen
JurNr ="XYZ" ' woher dieser Wert auch herkommt und sich zusammensetzt.
strSQL = "SELECT INT_Bewertungsboegen.Etagennr, INT_Bewertungsboegen.Durchgangtxt, INT_Bewertungsboegen.AdH_ID, INT_Bewertungsboegen.Startstation, INT_Bewertungsboegen.Nachname, INT_Bewertungsboegen.Vorname FROM INT_Bewertungsboegen Where [Etagennr]=" & rs!Etagennr & " ORDER BY Durchgangtxt ASC"
stDocName = "abf_Station_" & StnNr
CurrentDb.QueryDefs(stDocName).SQL = strSQL
DoCmd.OutputTo acOutputReport, "Station_" & StnNr , acFormatPDF, CurrentProject.Path & "\Station-" & StnNr & "_" & "Etage-" & rs!Etagennr & "_" & "Juror-" & JurNr & Format(Date, "\_yyyy-mm-dd") & ".pdf" 'Ablage der pdf-Datei am Speicherort der Datenbank
Next
Loop
End If
rs.Close:Set rs = Nothing
Exit Sub
End Sub
(unchecked!!)
Hallo und riesen Dankeschön. :)
Es soll nun so sein, dass jeweils für eine Prüfungsstation aber über alle Etagen hinweg die Daten an den Bericht übergeben werden sollen. Ich versuche mal den Code von DF6GL (vorheriger Beitrag) darauf zu münzen undgebe gerne Rückmeldung.
Noch zu der einen Frage bzw. dem Hinweis im Codebeispiel.
Zitat
JurNr ="XYZ" ' woher dieser Wert auch herkommt und sich zusammensetzt.
-->
Private Sub K3_BeforeUpdate(Cancel As Integer) ' JID generieren -> wird im Bewertungsbogen als Juror-ID ausgegeben
Dim ID As Long
If IsNull(K1) Or IsNull(K2) Or IsNull(K3) Then
MsgBox "Bitte Auswahl vervollständigen!"
Else
ID = K1 & K2 & K3
JID = ID
End If
End SubVG
Claudia
Hallo,
ok, dann musst Du diesen Wert in (meinem) Code eben noch entspr. berücksichtigen.
Prinzip ist , dass mit einer Recordset-Schleife alle Etagennummern durchlaufen werden und für jede dieser Nummern ein Bericht mit den jeweiligen Stationen gedruckt wird.
Falls Du das so gemeint hast...
Danke ,ich werds so machen...
Ja, so hab ich das gemeint. Ich wähle eine Station (also einen Bericht aus) und eine Jurorkennung und dann werden alle Bewerberdatensätze an den Bericht übergeben wobei mit der Schleife dann alle Etagen durchlaufen.
---
Das läuft so, dass eine Bewerbergruppe einer Etage zugeteilt wird und dann müssen die Bewerber 10 Interwiews (also 10 Bewertungsbögen pro Student) absolvieren. Es gibt mehrere Durchlaufe an dem Tag und die Bewerber werden vorab entsprechend einbestellt. Nachdem die Bögen aus dem Druck kommen, bekommt jeder Juror (drei pro Interviewstation) seine Packen für alle Durchläufe.
---
VG
Claudia