質問: "受注確認書(受注id:" & [id] & ")" と書きました。 マクロは上から順にpdfは開いているようなのですが、フォルダーにはpdfが一枚も保存されません。 どうも開いているだけで保存されないようです。 またマクロも最後のレコードになったときのアクションを書いていないため、「次のレコードがありません」というエラーメッセージで終わります。 フォーム上の全件を"受注確認書(受注id:" & [id] & ")"という名前で"c:\pdf"に別々にpdfで保存し、最後のレコードになったら完了するvbaを完成したいのですが、どなたか助けていただける方がいたらお願いいたします。当方、vbaは見よう見まねで書いているだけで意味はあまり理解できないレベルです。
回答: 間違いがいくつかあります。 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