2016-12-27 5 views
2

Hintergrund: Ich habe eine Datenbank, die ich für die Schulbehörde bin. Ich bin in der Endphase und hatte noch nie eine Schleife, die ich nicht verstehen konnte ... außer für diese.Erstellen Schleife zum Öffnen und Exportieren von Berichten

Setup: Hier ist die SQL auf der Abfrage, die den Bericht „rpt_SeatingChart_AMFirst“ läuft

SELECT tbl_Students.SchoolName, tbl_Students.StudentCalculated, tbl_Stops.[Stop Location], tbl_Stops.[Stop Time], tbl_Students.AssignSeat, tbl_Students.DateOB, tbl_Students.Address, tbl_Students.Zip, tbl_Students.Phone1, tbl_Students.Phone2, tbl_Students.Grade, tbl_Students.PhysicalLimitations, tbl_Students.ParentReq, tbl_Schools.[School Name], tbl_Students.ActiveRider 
FROM tbl_Schools INNER JOIN (tbl_Stops INNER JOIN tbl_Students ON tbl_Stops.ID = tbl_Students.[Stop LocationAM]) ON (tbl_Schools.ID = tbl_Stops.School) AND (tbl_Schools.ID = tbl_Students.SchoolName) 
WHERE (((tbl_Schools.[School Name])=[Forms]![frm_SchoolPickerAM]![Combo113]) AND ((tbl_Students.ActiveRider)="Active")); 

Die Form, dass es für die Eingabe bittet aus, ist das, was die Schule in dem Bericht angezeigt werden soll. Wenn ich also "Schule1" aus der Combo113 auswähle, würde der Bericht nur Schüler anzeigen, die dieser Schule zugewiesen sind. Ich habe einen Tisch mit Schulen darin gefunden: [tbl_Schools]! [SchoolName].

Ausführung: auf dem Click-Ereignis einer Schaltfläche würde Ich mag haben [rpt_SeatingChart_AMFirst] mit dem ersten [Name der Schule] öffnen aus dem [tbl_Schools] Tabelle. Exportieren Sie den Bericht als PDF, schließen und öffnen Sie ihn als zweiten [Schulname] in der Tabelle. Exportieren und wiederholen, bis alle Schulen in diesem Bericht aus der Tabelle geöffnet haben.

Antwort

0

bearbeiten Sie den Code wie folgt:

Private Sub GreenBinderReport_Click() 

    Dim OP1 As String 
    Dim RPT As String 
    Dim rs As DAO.Recordset 

    Set rs = CurrentDb.OpenRecordset("select [School Name] from tbl_Schools") 
    OP1 = "C:\Users\Joel Dahl\Desktop\ExportTest\" 
    RPT = "rpt_SeatingChart_TEST" 

    Do While Not rs.EOF 
     DoCmd.OpenReport "rpt_SeatingChart_TEST", acViewPreview, , "[School Name] = '" & rs(0) & "'" 
     DoCmd.OutputTo acOutputReport, RPT, acFormatPDF, OP1 & rs(0) & ".pdf" 
     DoCmd.Close acReport, RPT 
     rs.MoveNext 
    Loop 

    Set rs = Nothing 
End Sub 
1

Ich würde die [School Name] Bedingung aus der WHERE-Klausel in der Abfrage des Berichts nehmen, so dass Sie dies angeben können, wenn Sie den Bericht öffnen. Ihre Schaltfläche Ereignis braucht ein Cord-Set zu öffnen

Dim rs As DAO.Recordset 
Set rs = CurrentDb.OpenRecordset("select [School Name] from tbl_Schools") 

Sie können dann die Schleife durch diese Cord-Set und übergeben Sie die Schulnamen den Openreport Befehl

While Not rs.EOF 
    DoCmd.OpenReport "rpt_SeatingChart_AMFirst", , , "[School Name] = '" & rs(0) & "'" 
    rs.MoveNext 
Loop 

Set rs = Nothing 

Das ist völlig aus dem Gedächtnis, so dass Sie das vielleicht müssen prüfen Anzahl der Kommas im OpenReport-Befehl - es ist der Where condition Parameter, nach dem Sie suchen. Sie können denselben Trick verwenden, wenn Sie den Bericht aus dem Formular mit dem ausgewählten Kombinationsfeldwert öffnen möchten.

Hoffe, das hilft.

[Bearbeiten] Ich habe gerade die PDF-Anforderung erkannt. Ich erstelle dafür eine bestimmte PDF-Version des Berichts, in der Sie festlegen, dass die Eigenschaften des Berichts auf einem bestimmten Drucker, nämlich einem PDF-Druckertreiber, gedruckt werden. Innerhalb der Schleife können Sie die PDF-Datei mit dem Namen der Schule umbenennen, damit sie nicht vom Bericht der nächsten Schule überschrieben wird.

[Noch eine Änderung!] Sie müssen sich nur daran erinnern, dass Sie sicherstellen müssen, dass der Bericht die PDF-Datei erstellt hat, bevor Sie versuchen, sie umzubenennen. Ich kann mich nicht an den genauen Code dafür erinnern, bis jemand anderes in der Zwischenzeit eine bessere Antwort schreibt, müssen Sie warten, bis ich wieder im Büro bin, bevor ich Ihnen das geben kann.

+0

Danke mir für immer und läuft! Ich habe etwas zu deinem Code hinzugefügt, um herauszufinden, was ich davon brauche. Ich bin sehr nah dran, aber mir fehlt etwas Kleines, hoffe ich. Es durchläuft die drei Datensätze in der Tabelle und erstellt drei Berichte. Der Filter wird jedoch nicht auf den Bericht angewendet. Alle drei Schulen werden für jeden Bericht angezeigt, statt einer Schule für jeden Bericht. Ich hoffe ich habe genug geklärt! Ich werde den Code in den nächsten Kommentar, da es zu lang ist. –

+0

'Private Sub GreenBinderReport_Click() Dim OP1 As String Dim RPT As String Dim rs Als DAO.Recordset Set rs = CurrentDb.OpenRecordset ("select [Name der Schule] von tbl_Schools") OP1 =„C : \ Users \ Joel Dahl \ Desktop \ ExportTest \“ RPT = "rpt_SeatingChart_TEST" Do While Not rs.EOF DoCmd.OutputTo acOutputReport, RPT, acFormatPDF ‚DoCmd.OpenReport "rpt_SeatingChart_TEST", acViewPreview, „[ Name der Schule] = '"& rs (0) &"' " rs.MoveNext Loop Set rs = Nichts End Sub' –

0

Ich kann keinen Kommentar hinzufügen, aber versuchen Sie diese Bearbeitung, was Skippy gepostet hat.

While Not rs.EOF 
    DoCmd.OpenReport "rpt_SeatingChart_AMFirst", , , "[School Name] = '" & rs.fields("[School Name]").value & "'" 
    rs.MoveNext 
Loop 

Set rs = Nothing 
Verwandte Themen