• 締切済み

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

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

みんなの回答

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

nameを確認するときは、 nameにRS![対象者名]を代入した次の行にstopをいれて 処理がとまったら?nameで確認します。 わたしの回答では、SQL文を代入する変数として「SQL」 と書きましたが「strSQL」なんですかね。 だとしたら?strSQLで確認しないといけません。 ※ようするに?変数名 です。 てか、2カ所にstopを入れる必要はないので、strSQLにSQL文が 代入された後にstopを入れて、?name、?strSQLをそれぞれ 確認してみて下さい。

potatocompany
質問者

お礼

指定ファイルが間違っているようですが、もう全然わからないので諦めます。いろいろ教えていただきありがとうございました。

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

>?nameの後には >Microsoft Access >と表示されましたが、 >?SQLの後には何も表示されませんでした。 >どうしてでしょうか?何か間違っていますか? 説明不足ですみません。 前の回答と同じように処理を実行した状態で確認しないと 意味がありません。 処理を実行するとstopの箇所で処理が止まるので、そこで イミディエイトウィンドウで?nameや?SQLでEnterします。 なお、処理が止まったらF8キーで1行ずつ処理を進めることが できます。

potatocompany
質問者

お礼

確認してみたところ、実行してSTOPで止まったところでは、?nameでは私用しているフォームの名前が表示されました。 ?SQLと入力すると、やはり何も出てきません。 STOPは、strSQL=…の次の行に記入しています。

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

VBAの画面で、表示→イミディエイトウィンドウを選択すると 画面下にイミディエイトウインドウが表示されます。 そこに?name と入力してEnterを押すと、nameの中身が表示されます。 SQLを貼り付けた後ろにstopを書いて、そこでストップしたら 同じように?SQL と入力してEnterを押すと、SQLの中身が表示 されます。 そのSQLをコピーして、新たにクエリを作成して、SQLビューに 貼り付けてみて、ちゃんと1名分抽出されているか確認した方が よいかもしれません。

potatocompany
質問者

お礼

?nameの後には Microsoft Access と表示されましたが、 ?SQLの後には何も表示されませんでした。 どうしてでしょうか?何か間違っていますか?

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

#6です。 そうですか。。 んー。。 name = RS![名前]の部分って実際のフィールド名にしてますか? name = RS![対象者名]になるのかな? name = RS![対象者名]の次の行にstopと書いて、処理を実行すると ここでストップするので、その状態でnameのところにマウスの カーソルをかざしてみて下さい。nameの中身が表示されます。 そこでちゃんと1人の対象者名が拾えているか確認してみて下さい。

potatocompany
質問者

お礼

確認したところ、対象者名は一人分が拾えているようです。が、できるファイルは60名分のものが一括排出された、個人名のファイルでした。 難しいですね… いろいろご尽力いただきありがとうございました。

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

これを、昨日回答したVBAの中にあるSQLの箇所に貼り付けてみて下さい。 SQL = "SELECT T_取り込みデータ.評価実施, T_取り込みデータ.SAMPLEID, T_取り込みデータ.社員番号, T_取り込みデータ.性別," SQL = SQL & " T_取り込みデータ.所属チーム, T_取り込みデータ.職級, T_取り込みデータ.関係, T_取り込みデータ.対象者の所属チーム," SQL = SQL & " T_取り込みデータ.対象者名, T_取り込みデータ.対象者の資格, T_取り込みデータ.個人No, T_取り込みデータ.評価項目A," SQL = SQL & " T_取り込みデータ.評価項目B, T_取り込みデータ.評価項目C, T_取り込みデータ.[評価項目D], T_取り込みデータ.[評価項目E]," SQL = SQL & " T_取り込みデータ.評価項目F, T_取り込みデータ.評価項目G, T_取り込みデータ.評価項目H, T_取り込みデータ.評価項目I," SQL = SQL & " T_取り込みデータ.評価項目J, T_取り込みデータ.評価項目K, T_取り込みデータ.評価項目L, T_取り込みデータ.[評価項目M]," SQL = SQL & " T_取り込みデータ.[評価項目N], T_取り込みデータ.評価項目O, T_取り込みデータ.評価項目P" SQL = SQL & " FROM T_取り込みデータ" SQL = SQL & " WHERE (((T_取り込みデータ.評価実施)='2016年8月') AND ((T_取り込みデータ.対象者名)='" & name & "') AND ((T_取り込みデータ.対象者の資格)='F1'))" SQL = SQL & " OR (((T_取り込みデータ.評価実施)='2016年8月') AND ((T_取り込みデータ.対象者名)='" & name & "') AND ((T_取り込みデータ.対象者の資格)='F2'))" SQL = SQL & " OR (((T_取り込みデータ.評価実施)='2016年8月') AND ((T_取り込みデータ.対象者名)='" & name & "') AND ((T_取り込みデータ.対象者の資格)='F3'))" SQL = SQL & " OR (((T_取り込みデータ.評価実施)='2016年8月') AND ((T_取り込みデータ.対象者名)='" & name & "') AND ((T_取り込みデータ.対象者の資格)='F4'))" SQL = SQL & " OR (((T_取り込みデータ.評価実施)='2016年8月') AND ((T_取り込みデータ.対象者名)='" & name & "') AND ((T_取り込みデータ.対象者の資格)='F5-6'))" SQL = SQL & " OR (((T_取り込みデータ.評価実施)='2016年8月') AND ((T_取り込みデータ.対象者名)='" & name & "') AND ((T_取り込みデータ.対象者の資格)='F7-8'));"

potatocompany
質問者

お礼

やはり60人分が1ファイルになってしまいます。 いろいろご尽力くださったのに申し訳ありません。 ありがとうございました。

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

すみません。 クエリのデザインで、条件に「氏名」を追加して下さい。 とりあえず、誰かしらの名前を入れて1レコードだけ 抽出されることを確認します。 で、そのSQLを貼り付けて頂けると幸いです。 もちろん貼り付ける際、名前の箇所はAAAAなどに置き換えて下さい。 度々すみません。

potatocompany
質問者

お礼

SELECT T_取り込みデータ.評価実施, T_取り込みデータ.SAMPLEID, T_取り込みデータ.社員番号, T_取り込みデータ.性別, T_取り込みデータ.所属チーム, T_取り込みデータ.職級, T_取り込みデータ.関係, T_取り込みデータ.対象者の所属チーム, T_取り込みデータ.対象者名, T_取り込みデータ.対象者の資格, T_取り込みデータ.個人No, T_取り込みデータ.評価項目A, T_取り込みデータ.評価項目B, T_取り込みデータ.評価項目C, T_取り込みデータ.[評価項目D], T_取り込みデータ.[評価項目E], T_取り込みデータ.評価項目F, T_取り込みデータ.評価項目G, T_取り込みデータ.評価項目H, T_取り込みデータ.評価項目I, T_取り込みデータ.評価項目J, T_取り込みデータ.評価項目K, T_取り込みデータ.評価項目L, T_取り込みデータ.[評価項目M], T_取り込みデータ.[評価項目N], T_取り込みデータ.評価項目O, T_取り込みデータ.評価項目P FROM T_取り込みデータ WHERE (((T_取り込みデータ.評価実施)="2016年8月") AND ((T_取り込みデータ.対象者名)="AAAAA") AND ((T_取り込みデータ.対象者の資格)="F1")) OR (((T_取り込みデータ.評価実施)="2016年8月") AND ((T_取り込みデータ.対象者名)="AAAAA") AND ((T_取り込みデータ.対象者の資格)="F2")) OR (((T_取り込みデータ.評価実施)="2016年8月") AND ((T_取り込みデータ.対象者名)="AAAAA") AND ((T_取り込みデータ.対象者の資格)="F3")) OR (((T_取り込みデータ.評価実施)="2016年8月") AND ((T_取り込みデータ.対象者名)="AAAAA") AND ((T_取り込みデータ.対象者の資格)="F4")) OR (((T_取り込みデータ.評価実施)="2016年8月") AND ((T_取り込みデータ.対象者名)="AAAAA") AND ((T_取り込みデータ.対象者の資格)="F5-6")) OR (((T_取り込みデータ.評価実施)="2016年8月") AND ((T_取り込みデータ.対象者名)="AAAAA") AND ((T_取り込みデータ.対象者の資格)="F7-8")); 以上です。すみませんがよろしくお願いします。

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

#6です。 SQLでうまく1人分抽出できていないようですね。 Q_取り込み用クエリのSQLを教えて頂くことは可能ですか? Q_取り込み用クエリをデザインで開いて、表示でSQLビューを 選択すればSQLが表示されます。 そのままここに貼り付けるのがマズイ場合は簡略して頂いても 構いません。

potatocompany
質問者

お礼

項目名は適宜修正しました。 SELECT T_取り込みデータ.評価実施, T_取り込みデータ.SAMPLEID, T_取り込みデータ.社員番号, T_取り込みデータ.性別, T_取り込みデータ.所属チーム, T_取り込みデータ.職級, T_取り込みデータ.関係, T_取り込みデータ.対象者の所属チーム, T_取り込みデータ.対象者名, T_取り込みデータ.対象者の資格, T_取り込みデータ.個人No, T_取り込みデータ.評価項目A, T_取り込みデータ.評価項目B, T_取り込みデータ.評価項目C, T_取り込みデータ.[評価項目D], T_取り込みデータ.[評価項目E], T_取り込みデータ.評価項目F, T_取り込みデータ.評価項目G, T_取り込みデータ.評価項目H, T_取り込みデータ.評価項目I, T_取り込みデータ.評価項目J, T_取り込みデータ.評価項目K, T_取り込みデータ.評価項目L, T_取り込みデータ.[評価項目M], T_取り込みデータ.[評価項目N], T_取り込みデータ.評価項目O, T_取り込みデータ.評価項目P FROM T_取り込みデータ WHERE (((T_取り込みデータ.評価実施)="2016年8月") AND ((T_取り込みデータ.対象者の資格)="F1")) OR (((T_取り込みデータ.評価実施)="2016年8月") AND ((T_取り込みデータ.対象者の資格)="F2")) OR (((T_取り込みデータ.評価実施)="2016年8月") AND ((T_取り込みデータ.対象者の資格)="F3")) OR (((T_取り込みデータ.評価実施)="2016年8月") AND ((T_取り込みデータ.対象者の資格)="F4")) OR (((T_取り込みデータ.評価実施)="2016年8月") AND ((T_取り込みデータ.対象者の資格)="F5-6")) OR (((T_取り込みデータ.評価実施)="2016年8月") AND ((T_取り込みデータ.対象者の資格)="F7-8")); よろしくお願いします。

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

#6です。 Set DB = CurrentDb Set RS = DB.OpenRecordset("T_取り込み用") RS.MoveFirst Do Until RS.EOF name = RS![名前] SQL = "SELECT [T_取り込み用].実施日, [T_取り込み用].ID, [T_取り込み用].社員番号, [T_取り込み用].氏名…" SQL = SQL & " FROM T_取り込み用" SQL = SQL & " WHERE ((([T_取り込み用].氏名)='" & name & "'));" CurrentDb.QueryDefs("Q_取り込み用クエリ").SQL = SQL DoCmd.OutputTo acOutputReport, "R_評価2016", acFormatPDF, "C:\Data\" & name & ".pdf" RS.MoveNext Loop SQLの『[T_取り込み用].氏名』以降は必要に応じて、同じように フィールドを追加して下さい。 上記は氏名だけで抽出するSQLで「Q_取り込み用クエリ」 を書き換えているのでで、もし他に条件があるのなら SQLに足しておく必要があります。 とりあえず上記で、1人1ページのレポートが出力されるか 確認してみて下さい。

potatocompany
質問者

お礼

再度の回答ありがとうございました。 クエリが壊れる件は解消しました。 ただファイルについては名前の検索順序が(1から60に)変わっただけで やはり全員分が一気に出てしまいます…

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

> パラメーターが少なすぎます。1を指定してください DB で「 わからないフィールド名が出てきたよ、ということです。 > strSQL = "SELECT ID, 氏名 FROM 氏名マスタ ORDER BY ID" 実際のテーブル名、フィールド名が不明のまま、 適当に、意味合いだけで書いています。 実際のものに置き換えてください。

potatocompany
質問者

お礼

変えてみても、他の部分で同じ引っかかり方をしてしまいます。 取り込みテーブルは、【T_取り込み用】で[実施日][ID][社員番号][氏名][チーム][資格][評価者][関係][評価軸A][評価軸B]…[評価軸J]という感じの内容です。 これを、一度クエリ【Q_取り込み用クエリ】をかませ、ほとんど同じリストを作り、クエリを元にレポート【R_評価2016】を作成しています。 どこをどう変えたらいいか、もう少し詳しく教えていただけませんか?よろしくお願いいたします。

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

No.9 です。 > 元々書いてあったPrivate Sub コマンド0_Click()には > 動かないよう’をつけ では、まず コマンドボタン の名前は「コマンド0」 のままにする。 Private Sub コマンド0_Click() Call ToPDF() End Sub Private Sub ToPDF() ・・・・・ End Sub ボタン、テキストボックス、モジュール名、プロシージャ名、 その他で ToPDF というものが無いことを確認。 ToPDF 以外でも コントロール名とぶつからないように。

potatocompany
質問者

お礼

早速ありがとうございます。 教えていただいた通り修正したところ、動き出したのですが Set rst = dbs.OpenRecordset(strSQL, dbOpenForwardOnly) の部分でひっかかり 「実行時エラー3061:  パラメーターが少なすぎます。1を指定してください。」と出ます。 どういうことでしょうか?教えて頂けると幸いです。

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

関連するQ&A