2016-12-27 17 views
2

背景: 私はデータベースを用意しています。私は最終段階にあり、私は理解できなかったループを一度も持っていません...このものを除いて。ループを作成してレポートを開く/エクスポートする

セットアップ:ここ レポートが表示されるべき学校で、それはからの入力を求めているとの報告「rpt_SeatingChart_AMFirst」

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")); 

フォームを実行し、クエリのSQLです。ですから、もし私がcombo113からSchool1を選ぶと、その学校に割り当てられた生徒のみが報告されます。私はここにある学校のテーブルを持っています:[tbl_Schools]![SchoolName]。

実行: ボタンのクリックイベントで、私は[rpt_SeatingChart_AMFirst] [tbl_Schools]テーブルから最初の[学校名]で開くしたいと思います。そのレポートをPDFとしてエクスポートし、閉じて2番目の[School Name]テーブルに再度開きます。エクスポートし、すべての学校がテーブルからそのレポートに開かれるまで繰り返します。

答えて

0

編集あなたのコードは次のように:

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

[School Name]の条件をレポートのクエリのWHERE句から取り除いて、レポートを開いたときにこれを指定できるようにします。あなたのボタンイベントは、あなたが、その後することができます。このレコードセットをループし、あなたがチェックする必要があるかもしれませんので、これはメモリから完全にOpenReportメソッドコマンドに

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

Set rs = Nothing 

を学校名を渡すレコードセットを開くために

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

を必要としますOpenReportコマンドのカンマの数 - それはあなたが後にしているWhere conditionパラメータです。同じWhere conditionトリックを使用すると、選択したコンボボックスの値でフォームからレポートを開くことができます。

これが役に立ちます。

[編集]私はPDFの要件を検出しました。私がこれを行うのは、特定のプリンタ、つまりPDFプリンタドライバに印刷するようにレポートのプロパティを設定する、特定のPDFバージョンのレポートを作成することです。ループ内では、PDFファイルの名前を学校の名前に変更して、次の学校のレポートで上書きされないようにすることができます。

[別の編集!]名前を変更しようとする前に、レポートがPDFファイルの作成を完了したことを確認する必要があります。私はこれのための正確なコードを覚えていません。その間に他の誰かがより良い答えを投稿しない限り、私はあなたにこれを与える前に私がオフィスに戻るまで待つ必要があります。

+0

は私の起動と動作をありがとう!あなたのコードに何かを加えて、私が必要とするものを手に入れようとしました。私はスーパークローズですが、私は何か小さいものを逃しています、私は願っています。 テーブル内の3つのレコードを循環し、3つのレポートを作成します。ただし、レポートにフィルタを適用していません。各レポートの1つの学校ではなく、3つの学校すべてが各レポートに表示されています。私は十分に明確になることを望む! コードが長すぎるため、次のコメントにコードを挿入します。 –

+0

'プライベートサブGreenBinderReport_Click()文字列として 暗いOP1 DAO.Recordset セットrs = CurrentDb.OpenRecordset( "tbl_Schoolsから[学校名]を選択") OP1 =「Cなどの文字列として薄暗いRPT 薄暗いのRS :\ Users \ユーザージョエル・ダール\デスクトップ\ ExportTest \」 RPT = "rpt_SeatingChart_TEST" んがないRS.EOF DoCmd.OutputTo acOutputReport、RPT、acFormatPDF 「DoCmd.OpenReport "rpt_SeatingChart_TEST"、acViewPreview、、「[学校名] = '"&rs(0)&"' " rs.MoveNext ループ セットrs = Nothing End Sub' –

0

コメントを追加することはできませんが、Skippyが投稿した内容にこの編集を試してください。

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

Set rs = Nothing 
関連する問題