2

複数ページのアクセス レポートを顧客 ID に基づいて個別の PDF ファイルに分割し、顧客名 (または ID) に基づいてそれらの PDF ファイルを保存しようとしています。

レポートを 1 つの巨大な PDF ファイルに「印刷」/「変換」してそこで分割することを検討しましたが、一部の顧客の請求書は 2 ページ以上にまたがるため、1 つの PDF ファイルをページごとに分割することはできません。

どんな助けでも大歓迎です。誰かが何かについてもっと明確にする必要がある場合は、遠慮なく私に知らせてください。

4

2 に答える 2

4

これは、Access 2007 (以下の注を参照) 以降では簡単に実行できます。

パラメータを使用してレポートを開きWhereCondition、レコード ソースを特定の顧客に限定します。

DoCmd.OpenReport "rptFoo", acViewPreview, , "Customer_ID = 1"

次に、OutputTo を使用して、指定したファイル名で PDF として保存します。

DoCmd.OutputTo acOutputReport, "", acFormatPDF, "Spacely_Sprockets.pdf"

後でレポートを閉じます。

DoCmd.Close acReport, "rptFoo"

Customer_IDとデータのレコードセットを開くプロシージャを作成し、Customer_Nameこれらの 3 つのコマンドを各行の値で使用できます。

Access のバージョンが 2007 より古い場合は、PDF ファイルの作成に使用している方法をお知らせください。

注: Access 2007 の場合、Office Service Pack 2 は組み込みの [名前を付けて保存]/XPS サポートを提供します。

于 2012-07-16T06:37:23.853 に答える
2

PDF 印刷は MS Access 2010 で利用できます。2007 の場合は、Microsoft からアドオンをインストールできます。PDF および XPS ファイル形式のファイルを印刷、共有、および保護します。

2007 より前のバージョンでは、以下を使用できます。

  • Stephen LeBan のReportToPDFは 2 つの DLL だけで構成されていますが、MS Access でしか動作しません

  • CutePDFは無料で使いやすいです。

  • PDFCreatorも無料で、VBA で完全に自動化できます (最近は使用していませんが、この機能はまだ利用できると思います)。

  • 有料の PDF クリエーターは何人でも。

OpenReport の WHERE 引数は、 2003 バージョン( OpenReport 2010も)以降で利用可能です。

バージョン 2003、2007、および 2010 のすべての顧客のレポートを印刷するには、関連するファイルをループして、

Dim rs AS DAO.Recordset
Set rs = CurrentDB.OpenRecordset("SELECT DISTINCT CustimerID FROM Invoices")

   Do While Not rs.EOF
      ''expression.OpenReport(ReportName, View, FilterName, 
      ''      WhereCondition, WindowMode) -- 2010 has OpenArgs

      DoCmd.OpenReport "Invoices",<..>,,"CustomerID=" & rs!CustomerID
      ''OutputTo or other relevant code

      rs.MoveNext
   Loop

PDF の入手方法は、バージョンとインストールしたツールによって異なります。たとえば、PDFCreator または CutePDF を使用acViewNormalしている場合は、ビューに使用できます。PDFCreator のセットアップでは、事前にファイル名を割り当てることができます。CutePDF の場合は、ファイル名を入力する必要があります。Access 2007 および 2010 の場合はOutputTo、既に述べたように を使用できるため、acViewPreview最適です。

2007 年と 2010 年のレポートを電子メールで送信するには、 SendObjectを使用できます。以前のバージョンでは、かなり多くのコードが必要になります。おそらく最も簡単なオプションは、Outlook を自動化することです。

于 2012-07-16T10:57:38.920 に答える