• 締切済み

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

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

みんなの回答

  • naoto0216
  • ベストアンサー率46% (183/391)
回答No.10

#6です。 諦めるのはまだ早いですよ! とりあえずループして60ファイルは出来ているので あとはSQLで氏名単位で抽出するだけです。 簡単でよいので、テーブル構成を教えて頂けたら具体的な 回答ができると思います。 あ、わたしも素人ですよ。分からないことがあったらすぐ こちらに質問させて頂いております。

potatocompany
質問者

お礼

ありがとうございます!ではもう一度だけ… 取り込みテーブルは、【T_取り込み用】で[実施日][ID][社員番号][氏名][チーム][資格][評価者][関係][評価軸A][評価軸B]…[評価軸J]という感じの内容です。 これを、一度クエリ【Q_取り込み用クエリ】をかませ、ほとんど同じリストを作り、クエリを元にレポート【R_評価2016】を作成しています。 アドバイスいただけますでしょうか。よろしくお願いいたします。

すると、全ての回答が全文表示されます。
  • m3_maki
  • ベストアンサー率64% (296/460)
回答No.9

No.4 です。 > 、「イベントプロパティに指定した式 クリック時でエラーが発生しました:このメンバー識別子は既にオブジェクトモジュールの中に存在しています。」 ということなら、 多分、コントロールの名前が問題になっていると思われます。 potatocompany さんがどんなアレンジをなさったかわかりませんが コマンドボタンのクリックイベントに直接コードを入れ込んだか あるいは、そこから件のプロシージャを呼び出すようにしたか、 いずれにせよ、コマンドボタンの名称とプロシージャ名が同じであるような? 他のコントロールやフォーム名とぶつかっている可能性ももちろんあります。

potatocompany
質問者

お礼

おっしゃる通り、クリックイベントに直接コードを書き込みました。 元々書いてあったPrivate Sub コマンド0_Click()には 動かないよう’をつけ、その下に続けて教えていただいたPrivate Sub ToPDF()以下を貼りつけました。 どう変更したらよろしいですか?教えて頂ければ幸いです。

すると、全ての回答が全文表示されます。
  • naoto0216
  • ベストアンサー率46% (183/391)
回答No.8

#6です。 >ファイル名が個人名になるだけで、全レコード分が >1ファイルになってしまいます。つまり、ファイル名が >異なる同じ内容(60ページ)のファイルができてしまいます。 ってことなので、恐らくSQLでうまく抽出できてないんだと 思います。 わたしの方で試したのは、以下のようなテーブルです。 ID 名前  備考 1 あああ  備考あああ 2 いいい  備考いいい 3 ううう  備考ううう で、このテーブルをRSにSETします。 RSをMoveFirstしてループに入り、まず1レコード目の名前を 取得し(あああ)、変数nameに保存。 次にそのnameを条件とするSQLを生成し、クエリQ_Dummyを このSQLで書き換え。 次にそのQ_DummyをレコードソースとしたレポートをPDFで保存。 で次のレコードに移動・・・という流れです。 うまく名前で抽出できていないから60レコード丸々のPDFが 人数分できてしまってるんだと思います。 SQLを生成した後にstopを入れて、イミディエイトウインドウで SQLの中身を表示させ、その内容を新しく作ったクエリに貼り付けて みてちゃんと抽出出来ているか確認してみてください。

potatocompany
質問者

お礼

回答ありがとうございます。 言葉の意味が分からず、何をどう直したらいいのか全くわかりませんでした… 素人にはできないのかもしれません。 あきらめて、今後も時間をかけて保存しようと思います。 自分がふがいなくて恐縮ですが、何度もご回答いただき本当に感謝しています。ありがとうございました。

すると、全ての回答が全文表示されます。
  • naoto0216
  • ベストアンサー率46% (183/391)
回答No.7

#6です。 >Name = RS![氏名]のところで、実行時エラー2135 >このプロパティは読み取り専用である為、設定できません。との >エラーメッセージが出てしまいます。 先ほどの回答には変数の定義する部分は省略しておりました。 もしやってなければ定義する必要があります。 Dim name As String Dim SQL As String を処理の頭の部分に貼り付けてみて下さい。

potatocompany
質問者

お礼

追加のご教授ありがとうございます。 早速貼りつけてみたところ、PDF化ができるようになりました! が、ファイル名が個人名になるだけで、全レコード分が1ファイルになってしまいます。つまり、ファイル名が異なる同じ内容(60ページ)のファイルができてしまいます。 作りたいファイルは個人名に紐づく1ページのみのファイルです。 一応改ページは設定できていると思います。 また(途中で動作をキャンセルしてしまったせいかもしれませんが)実行するとデータ取り込み用のクエリが壊れてしまうようです。 何度も申し訳ありませんが、引き続きご教授いただけないでしょうか。 よろしくお願いいたします。

すると、全ての回答が全文表示されます。
  • naoto0216
  • ベストアンサー率46% (183/391)
回答No.6

試してみたところ、これでいけそうです。 Set DB = CurrentDb Set RS = DB.OpenRecordset("テーブル") RS.MoveFirst Do Until RS.EOF name = RS![名前] SQL = "SELECT [テーブル].ID, [テーブル].名前, [テーブル].備考" SQL = SQL & " FROM テーブル" SQL = SQL & " WHERE ((([テーブル].名前)='" & name & "'));" CurrentDb.QueryDefs("Q_Dummy").SQL = SQL DoCmd.OutputTo acOutputReport, "レポート", acFormatPDF, "C:\Data\" & name & ".pdf" RS.MoveNext Loop レポートのレコードソースをQ_Dummyという名前のクエリを 指定しておいきます。 ループでそのQ_Dummyの条件をユーザーごとに書き変えながら (名前で抽出)、PDFをC:\Dataに名前.pdfで出力しています。

potatocompany
質問者

お礼

回答ありがとうございます。 Name = RS![氏名]のところで、実行時エラー2135 このプロパティは読み取り専用である為、設定できません。との エラーメッセージが出てしまいます。 どう直したらいいでしょうか? 教えて頂けると嬉しいです。

すると、全ての回答が全文表示されます。
  • naoto0216
  • ベストアンサー率46% (183/391)
回答No.5

あまり詳しくないので、質問の内容とマッチしてないかも しれないのでスルーして頂いても構いません。 わたしだったら、とりあえず一括で60人分のレポートを  ・PDF出力ソフト(例えば「CubePDF」)を使ってPDFに出力。  ・PDFの一括分割ソフト(例えば「SEPPDF」)を使って上記PDFを分割。  ・ファイル名一括変換ソフト(例えば「ファイルの名前を一括変更」)を   使って分割されたPDFファイル名を一括変換 します。 これでも多少手間はかかりますが、1レコードずつPDFに出力するよりは だいぶ効率的かと思います。 ちなみに画像は「ファイルの名前を一括変更」というExcelベースの ファイル名変換ソフトです。 現在のファイル名の箇所は、フォルダを指定すれば勝手に埋まりますし 変更後のファイル名の箇所は、氏名マスタからコピーした60人分の 氏名を貼り付ければよいかと思います。

potatocompany
質問者

お礼

ご回答ありがとうございます。 詳しいソフト名まで助かります。 ソフトのインストールはかなり厳しく制限されているので難しいかもしれませんが、最後の選択肢として参考にさせていただきます。 ありがとうございました。

すると、全ての回答が全文表示されます。
  • m3_maki
  • ベストアンサー率64% (296/460)
回答No.4

サンプルです。 Sub ToPDF() Const rpt_Name As String = "レポート評価シート" Dim dbs As DAO.Database Dim rst As DAO.Recordset Dim strSQL As String Dim strCreteria As String strSQL = "SELECT ID, 氏名 FROM 氏名マスタ ORDER BY ID" Set dbs = CurrentDb Set rst = dbs.OpenRecordset(strSQL, dbOpenForwardOnly) Do Until (rst.EOF) strCreteria = "ID=" & rst!ID 'ID が数値型の場合 DoCmd.OpenReport rpt_Name, acViewPreview, , strCreteria DoCmd.OutputTo acOutputReport, , acFormatPDF, "C:\Sample\PDF\" & rst!氏名 & ".pdf", False DoCmd.Close acReport, rpt_Name rst.MoveNext Loop End Sub

potatocompany
質問者

お礼

回答ありがとうございます。 教えていただいた通りに入力しファイル名を適宜変更して実行してみると、「イベントプロパティに指定した式 クリック時でエラーが発生しました:このメンバー識別子は既にオブジェクトモジュールの中に存在しています。」とのエラーメッセージが出ました。 どういうことでしょうか?教えて頂けると嬉しいです。 よろしくお願いします。

すると、全ての回答が全文表示されます。
  • chayamati
  • ベストアンサー率41% (260/625)
回答No.3

「フィードバックシート」は紙ですか、電子データですか? 紙ならレポートの単票、フォームの印刷も可能です。 また、PDFなら前もってファイルを保存しておかなくても 必要な時にプリンターをPDFとするとPDFファイルが作成されます。 添付は自分の食事記録用に使っている検索画面です。 食品テーブルには今762件の食品が入っていますが、食品分類ー読み順の設定に しています。 ファイル名の管理も必要なく、約5年間使い続けています。

potatocompany
質問者

お礼

回答ありがとうございます。 フィードバックは電子データですので、個別ファイルとして保存しないと レコードがまとめて1ファイルになってしまうのです。 レコード数が60程度なので、(今回とりあえずやったように)1枚ずつPDF作成してもいいのですが…結構時間がかかるんですよね。 もう少し探してみます。ありがとうございました。

すると、全ての回答が全文表示されます。
  • chayamati
  • ベストアンサー率41% (260/625)
回答No.2

回答ではありませんが PDFでの保存にメリットはありますか PDFファイルと氏名は1対1ですか Accessはメリットは色々あります。 その一つが検索機能です 評価シートのレポートに抽出条件(氏名)をつけるだけでいつでも レポートは得られます。 ファイルも一つで済みます。

potatocompany
質問者

お礼

回答ありがとうございます。 むしろPDFによる保存がメインという向きもありまして… 一人ひとりに対し個人の結果のみを表示させたフィードバックシートを作成することが目的です。 もう少し考えてみます。ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A