Accessフォーム全レコードをPDFで個別保存

このQ&Aのポイント
  • 「受注一覧」という表形式フォームに日々の受注客百件程度が表示されています。レコードのフィールドに[ID]という受注IDコードがあります。
  • 受注確認のメールにPDFの添付ファイルを作成するための「受注確認PDF」というレポートがあり、それを使って"受注確認書(受注ID:" & [ID] & ")"というファイル名で"C:\PDF"フォルダーに一件(1ページ)ずつ保存するボタンを作成する必要に迫られておりますが、ネットでいろいろ調べて、もう少しというところでなかなうまくいきません。
  • フォーム上の全件を"受注確認書(受注ID:" & [ID] & ")"という名前で"C:\PDF"に別々にPDFで保存し、最後のレコードになったら完了するVBAを完成したいのですが、どなたか助けていただける方がいたらお願いいたします。当方、VBAは見よう見まねで書いているだけで意味はあまり理解できないレベルです。
回答を見る
  • ベストアンサー

Accessフォーム全レコードをPDFで個別保存

使用MS Access 2010 以前から何度かここでお世話になっております。よろしくお願いします。 「受注一覧」という表形式フォームに日々の受注客百件程度が表示されています。レコードのフィールドに[ID]という受注IDコードがあります。 受注確認のメールにPDFの添付ファイルを作成するための「受注確認PDF」というレポートがあり、 それを使って"受注確認書(受注ID:" & [ID] & ")"というファイル名で"C:\PDF"フォルダーに一件(1ページ)づつ保存するボタンを作成する必要に迫られておりますが、ネットでいろいろ調べて、もう少しというところでなかなうまくいきません。 「受注一覧」フォーム上のボタンに レポートを開くマクロの実行(2000回)-次のレコード としたマクロを登録し、「受注確認PDF」レポートの”開くとき”イベントに Private Sub Report_Open(Cancel As Integer) DoCmd.OutputTo acOutputReport, "受注確認PDF", acFormatPDF, "C:\PDF" Reports!受注確認PDF.Caption = "受注確認書(受注ID:" & [ID] & ")" と書きました。 マクロは上から順にPDFは開いているようなのですが、フォルダーにはPDFが一枚も保存されません。 どうも開いているだけで保存されないようです。 またマクロも最後のレコードになったときのアクションを書いていないため、「次のレコードがありません」というエラーメッセージで終わります。 フォーム上の全件を"受注確認書(受注ID:" & [ID] & ")"という名前で"C:\PDF"に別々にPDFで保存し、最後のレコードになったら完了するVBAを完成したいのですが、どなたか助けていただける方がいたらお願いいたします。当方、VBAは見よう見まねで書いているだけで意味はあまり理解できないレベルです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

間違いがいくつかあります。 DoCmd.OutputTo acOutputReport, "受注確認PDF", acFormatPDF, "C:\PDF" 上記のコードで、出力ファイル名が指定されていない。 ちゃんと拡張子も含めてファイル名を指定する必用があります。 さらにファイル名には、: は使用できません。 レポートを開くときのイベントでOutputToを実行してますが、このイベントではOutputToは実行できません。フォーム上のボタンのイベントプロシージャで OutputTo を実行しましょう。 「一件(1ページ)づつ保存する」ということですが、具体的にはどのように1件だけ抽出しているのでしょうか。レポートのレコードソースをパラメータクエリにしているのでしょうか。それともレポートを開くアクションで Where条件式を設定しているのでしょうか。 パラメータクエリで、受注一覧フォームの受注IDを参照しているとして回答します。 また、マクロとイベントプロシージャを混在させるのは煩雑ですので、イベントプロシージャのみで記述します。 受注一覧フォーム上のコマンドボタン(コマンド1)のクリック時のイベントプロシージャ Private Sub コマンド1_Click() DoCmd.GoToRecord acActiveDataObject, , acFirst Do If Me.Recordset.RecordCount = Me.CurrentRecord Then MsgBox "最終レコードまで出力しました。" Exit Sub End If DoCmd.OutputTo acOutputReport, "受注確認PDF", acFormatPDF, "C:\PDF\受注確認書(受注ID " & Me.顧客コード & ").pdf" DoCmd.GoToRecord acActiveDataObject, , acNext Loop End Sub

Gomez55555
質問者

お礼

hatena1989様 早速のご回答ありがとうございます! >パラメータクエリで、受注一覧フォームの受注IDを参照しているとして回答します。 はい、そのとおりです。 ただいま帰宅してしまったため、明日出社次第ご教授いただいた記述でチャレンジしてみます。ありがとうございました。

Gomez55555
質問者

補足

hatena1989様 ご連絡が遅くなり、申し訳ありません。 出来ました!完璧です!ありがとうございました。 私のレベルだとすべての記述を理解するのは困難ですが、少しずつ勉強していきたいと思います。 またご相談すると思いますのでその時はよろしくお願いします。

関連するQ&A

  • Access2007レポート特定レコードのPdf化

    Access2007を使用して台帳管理を行っています。 その際にレポートをPdf化して電子保存を行っていますが、いちいちメニューからレコード指定しでファイル出力するのが煩雑なのでVBAを勉強して自動化しようと思っています。 実装したい機能はフォーム上に配置されたボタンを押したら、そのIDのレポート(PDFファイル)が指定のフォルダに保存されるものです。 初心者なりにいろいろ調べて下記のコードに行きついたのですがうまくID選択されません(全レコード保存される)。 ご教授お願いします。 Sub Pdf作成() DoCmd.OpenReport "レポート名", acViewPreview, , "ID=" & Me!ID DoCmd.OutputTo acOutputReport, "レポート名", acFormatPDF, "保存path&ファイル名.pdf" End Sub

  • アクセスのレポートのPDF化

    初心者です。よろしくお願いします。 アクセスで、ある入力フォームより、受付番号の一致したレポート(単票)をPDF化したものをエクスポートしたいのですが、受付番号で一致したものを抽出する条件の書き方わかりません。 PDF化は色々参考にして、下のようにできたのですが、これだと当然ながら、全レコード分出力されてしまいます。フォーム上に表示されている受付番号のみのレポートを出力したいのです。条件の加え方をやさしく教えていただけるとありがたいのですが。よろしくお願いします。 (レポートのPDF化) DoCmd.OutputTo acOutputReport, "受付票", acFormatPDF, "C:\ 受付票.pdf"

  • Access PDF作成-日付フォルダー作成保存

    使用MS Access 2010 たびたびの質問で恐縮です。 レポートをPDFで一件づつ自動作成-任意のファイル名で自動保存のイベントは、 質問番号:6530399 のご回答で上手くいったのですが、試行してみるとPDFファイルが大量にできるので、「日付名フォルダー」を毎日生成して、そこに自動保存したくなりました。そこで新しい質問として新たにお尋ねします。 「受注一覧」という表形式フォームに日々の受注客百件程度が表示されています。レコードのフィールドに[ID]という受注IDコードがあります。 受注確認メールへPDF添付ファイル作成用の「受注確認PDF」というレポートがあります。 レコードソースのパラメータクエリで、受注一覧フォームの受注IDを参照しています。 それを使って"受注確認書(受注ID:" & [ID] & ")"というファイル名で"C:\PDF"フォルダーに"yyyymmdd"というフォルダーを自動で作成し、そこにPDFを一件ごと(1ページ)別名で保存するボタンを作成したいのです。 "yyyymmdd"のフォルダーがすでにある場合はそこに保存、無い場合は自動生成することにしたいと思っています。 Private Sub コマンド1_Click() Dim path As String path = "c\受注確認PDF" & Format(Date, "yyyymmdd") MkDir path On Error GoTo ERR1 Exit Sub ERR1: DoCmd.GoToRecord acActiveDataObject, , acFirst Do If Me.Recordset.RecordCount = Me.CurrentRecord Then MsgBox "最終レコードまで出力しました。" Exit Sub End If DoCmd.OutputTo acOutputReport, "受注確認PDF", acFormatPDF, "c\受注確認PDF" & Format(Now(), "yyyymmdd") & "\" & "受注確認書(受注ID " & Me.ID & ").pdf" DoCmd.GoToRecord acActiveDataObject, , acNext Loop End Sub DoCmd.GoToRecord から後の部分はhatena1989 様のご回答で上手くいったのですが、前半部分の日付名フォルダー作成のところが上手くいきません。 MkDir path →実行時エラー75 パス名が無効です。 となってしまいます。 また、エラートラップというのでしょうか?その書き方も自信ありません。 ご教授いただきたく、お願いします。

  • AccessでPDFを複数ファイルにして出力

    ○環境 Access2007or2010 Windows7Pro Accessで、帳票をPDFファイルにして出力することを考えています。 VBAのコードで DoCmd.OutputTo acOutputReport, (オブジェクト名), acFormatPDF, (ファイルのパス) と書けば出力できることを確認しました。 さらに、10ページあるレポートならば、10のPDFファイルに分割して出力したいと考えています。 が、そこまで方法を書いたページが見つかりません。 別ソフトと組み合わせてもいいので、何か方法をご存じの方はお教えください。 よろしくお願いします。

  • Access2010でTifファイルへ書き出す法

    Access2010でレポートをPDFファイルへ書き出すコードは DoComd.OutputTo acOutputReport , "R_売上明細", acFormatPDF, ファイル名 & ".pdf" とかですが、これをtifファイルで書き出したいときは、どうなるのでしょうか? 教えてください。

  • ACCESSで、1レコードずつPDF保存できますか

    ACCESS2010で初めてDBを作成しています。 DBは完成、レポートも完成したのですが、1レコードずつPDFにする方法がわかりません。 とりあえずレポートを開き、レコードを送りながら完全手作業でPDF保存しました。 これを自動で行う方法はありますか? 作成したいレポートは氏名で紐づく評価シートで、氏名マスタには個別IDも振付けています。 IDは現在60程度ですが、今後毎年増えていく予定です。 できればPDFを保存する際、氏名で保存したいのですが… いろいろ調べましたが、応用力がないこともありどうしてもうまくいきません。 やり方ご存じの方ご教授ください。

  • AccessレポートをExcel2010PDF出力

    AccessからレポートのPDF出力を考えています。 DoCmd.OutputTo acOutputReport, Source, acFormatPDF, FileName Access2007以降なら上の文でPDF出力できますが、Access2003とExcel2010がインストール された環境で、Access2003からExcel2010の機能を使ってPDF出力させることは可能でしょうか。 AccessからExcelのワークシート関数を使ったり、Excelファイルを開いて編集することはできたので、 PDF出力もできるかもしれないと思い、質問しました。

  • ACCESSレポートをPDFに出力したい

    ACCESSでレポートを作成して、下記のVBAで管理番号(ID)別にPDFファイルで保存したいと思っています。保存名はIDにしたいと思っています。 管理番号ごとに出力する部分のコードが分からずに困っています。どなたかご教授頂けないでしょうか?よろしくお願いします。 Private Sub コマンド9_Click() Const TBL_NAME = "T_住所録" Const RPT_NAME = "R_住所録" Const PDF_PATH = "C:\Users\TEST\" Dim rs As ADODB.Recordset Set rs = New ADODB.Recordset rs.Open "SELECT DISTINCT ID FROM T_住所録", CurrentProject.Connection, adOpenStatic, adLockReadOnly Do Until rs.EOF pdfName = rs!ID DoCmd.OpenReport RPT_NAME, acViewPreview, , "ID = '" & rs("ID") & "'" DoCmd.OutputTo acOutputReport, RPT_NAME, acFormatPDF, PDF_PATH & pdfName & ".pdf" DoCmd.Close rs.MoveNext Loop End Sub 実行すると「出力データを指定したファイルに保存できません」とメッセージが出ます。

  • Access2007でページ毎にPDFを出力したい

    過去の質問等を参考に以下の方法を試してみました。 1.DoCmd.OpenReport でレポートをプレビュー(アイコン化)で開く 2.標題を変える 3.DoCmd.PrintOut でページを指定して印刷する  (事前にレポートデザインで、出力先プリンターをAdobe PDFにしています) 4.ページの枚数だけ、2~3を繰り返す この方法で処理はできたのですが、Adobe PDFを通しているせいか、すごく時間がかかります。 そこでもっとスムーズに出力する方法はないでしょうか? 例えば、DoCmd.OutputTo acOutputReport, "レポート名", acFormatPDF, "パス+ファイル名.pdf" でPDF出力を行なうととても早いので、こちらの方法でページを指定できると理想なのですが、、、 以上です。 よろしくお願いいたします。

  • Accessでレコードの保存をせずにフォームを閉じたい

    Accessでデータベースのレコード追加を行うフォームを作成しています。 コマンドボタン(1)をクリック→新しいレコードの追加 コマンドボタン(2)をクリック→フォームを閉じる としています。(ウィザードを使用して、埋め込みマクロ?を設定しています。) コマンドボタン(1)でレコードが追加されるのは問題ないのですが、 コマンドボタン(2)をクリックした場合も、レコードが追加されていることに気がつきました。 一般的に入力する人は、 データを追加しようと思って入力していたけれど、 途中でやめてフォームを閉じることってありますよね? そういう場合にレコードが追加されてしまったら問題だと思ったのです。 ですが、どうしたらレコードの追加をせずにフォームを閉じられるかがわかりません。 それって可能でしょうか? Access初心者です。難しいVBAとかはまだよくわかりません。 何か方法、アドバイス等ありましたら よろしくお願いします。