Access VBAでのレコード選択・印刷方法

このQ&Aのポイント
  • Access VBAで、Accessフォーム上に表示されたレコードを選択・印刷する方法について説明します。
  • フォーム上に表示された複数のレコードを一括印刷するのではなく、ユーザが選択したレコードだけを印刷する方法を解説します。
  • Recordsetオブジェクトを使用して、フォーム上でのチェック状態を取得し、印刷するレコードを選択する方法についても説明します。
回答を見る
  • ベストアンサー

Access VBAで、Accessフォーム上に表示されたレコードを選

Access VBAで、Accessフォーム上に表示されたレコードを選択・印刷するには? Access VBA (Access 2003 SP3) SQL Server 2000 の組合せでプログラムを書いています。 フォーム上に表示された複数のレコードを一括印刷するのでなく、 ユーザが、印刷したいレコードだけにチェックを入れて、 チェックの入ったレコードだけを印刷できるようにするには、 どう書いたらよいでしょうか? たとえば、ユーザが外注先の一覧画面で、 選択した外注先だけの宛名ラベルを 印刷できるようにしたいです。 使用するテーブル:T_Gaichusaki 使用するフォーム:F_SearchGaichusaki 使用するレポート:R_GaichusakiLabel フォーム上で、チェックが入っているかどうかを VBAから参照するにはどうしたらよいのか、というところから わかりません。。 VBAのRecordsetオブジェクトを使うのでしょうか? よろしくご教示下さい!!

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

  • ベストアンサー
  • KHSSSK
  • ベストアンサー率76% (13/17)
回答No.3

どうしてもRecordsetで行いたいのであれば Access.mdb の場合 Dim rs As Recordset Set rs = Forms!フォーム名.RecordsetClone (Me.RecordsetClone でも可) rs.MoveFirst Do Until rs.EOF    必要な処理 rs.MoveNext Loop rs.Close: Set rs = Nothing Access.adp の場合 Dim rs As Object 以下mdb の場合と同じ 私の所でもチェックの入った会社のみ宛名ラベル印刷するようにしていますがテーブルにYes/No型のフィールドを設けて、クエリーで選択するようにしています。

lilybloom
質問者

お礼

Set rs = Forms!フォーム名.RecordsetClone (Me.RecordsetClone でも可) このようにデータ参照すればよいのですね。 早速試してみます。 ありがとうございました(ぺこり)

その他の回答 (2)

  • papope
  • ベストアンサー率33% (8/24)
回答No.2

こんにちは Accessでチェックボッス付の一覧ができるのかは忘れましたが リストボックスで選択させて(複数選択可にして)、その選択値を取得するのであれば Dim elm for each elm In ListBox.ItemSelected msgbox(ListBox.ItemData(elm)) Next で選択値を取得できますので、それをレポートに渡せば良いのかと・・・。

lilybloom
質問者

お礼

回答ありがとうございます! でもリストボックスのことじゃないんです・・・ うーん、どう説明したらいいのか、私の質問力の問題かも・・ 取り急ぎお礼までです!

  • papope
  • ベストアンサー率33% (8/24)
回答No.1

こんにちは。 お問い合わせの件ですが、フォーム上からチェックが入っているかどうかわかれば できるのでしょうか? リストボックスなどを使用していると違いますが 帳票のVBAより Forms!画面名!項目名 で参照自体はできます。 リストボックスなどで、複数選択可能な場合も可能です。 Webで調べると結構出てますよ。 ただ、フォームの参照で悩んでいるようですと、その後の処理の作成が 難しいような気もします。 ご参考まで。

lilybloom
質問者

お礼

ありがとうございます(ぺこり) Forms... で参照できることは知っているのですが、 現在、画面上に表示されている複数レコードをRecordsetオブジェクトに セットして、カーソルでDo Loopすることができないかな、と思っているのです。 具体的なコードをどう書けばいいか、ご存知ありませんでしょうか?

関連するQ&A

  • accessで表示しているレコードのみの印刷について

    Access初心者です。現在Access2002を使用しています。 現在顧客管理フォームで1レコードを1ページに印刷できるように設定してあります。現在表示しているレコードのみを印刷できるようなボタンを、フォーム上に設定したいと考えているのですが可能でしょうか? 通常の印刷ですとページ指定をしないと、選択したレコードすべてが印刷されてしまいちょっと面倒なもんですから、できればと考えたわけです。宜しくお願いします。

  • アクセスで指定したレコードをフォームで開く方法?

    アクセスで、帳票形式のフォームで選択したレコードの内容を、詳細を表示する用のフォーム(単票形式)で開きたいのですが、どうしたらよいのでしょうか?(初心者です) 例えば、帳票形式のフォームで「予約番号:1」のレコード 選択した状態で、ボタンをクリックすると、 詳細を表示する用の単票形式のフォームの「予約番号:1」のレコードが表示されるようにしたいのです。 マクロでは出来なそうなので、VBAで・・・というところまでしか検討がつきません。 使用しているのはアクセス2002です。 どなたかご存知の方がいらっしゃいましたら、教えてください。よろしくお願いします。

  • Access2013 vbaサブフォームのレコード

    [Access2013 vba] ■したいこと サブフォームのレコードの中から、一レコードだけをチェックボックスなどで選択したいのですが、どのようにしたら出来ますでしょうか。 複数行選択は出来ないようにしたいです。 選択したのち、メインフォームの選択ボタンを押すと、そのレコードのID番号を取得して、呼出元のフォームのIDフィールドに代入したいです。 ■画面の流れ・・・ Aフォーム → 帳票型Bフォームで、レコードを選び「開く」ボタンを押す→ B 'メインフォームとCサブフォーム)が開く Cサブフォームのレコードをチェックボックスにチェックを入れて選択する B ' メインフォームの「選択」ボタンを押すと B ' メインフォームと、その前のBフォームが閉じて Aフォームに戻り、AフォームのIDフィールドに選択したIDが格納される。 よろしくお願いします。

  • Access+VB ふたつのフォーム

    Access+VBAでフォームです。 ふたつのフォーム [A]と[B]があります。 どちらも同一のクエリをレコードソースとし、[A]も[B]も開かれて表示されています。 [A]を更新した時、[B]も更新されるようにしたいのですが、「データの競合」「他のユーザーを反映・・・」とメッセージが出ます。 どのようにしたら、スムースに更新、追加できるのでしょうか?

  • ACCESS帳票フォームのレコード移動と条件分岐

    フォームのデータからWhere条件式で、合致するレコードを抽出するクエリーを作りました。 このレコードを新しく作成した帳票フォームに表示しています。 日付、商品名、項目名、変数1、変数2 この帳票からラベルを出力したいのです。 1個のレコードにフォーカスを当てた時ラベルを作成するVBAは作れたのですが、先頭から順番にすべてのレコードを検査し、変数1と変数2に値が入力されている場合のみ、そのレコードのデータからラベルを出力するということができません。 どのように構文を組んだらよいでしょうか? ACCESS2007、windows7環境です。

  • Access2000/2002フォームのレコードセットについて

    Access97で作成されたプログラムを Access2002で作り直す必要に迫られています。 プロジェクト形式ではなく、MDB形式のままで進めているのですが VBAのコーディングは、すべてADOに変更するように指示されています。 基本的な知識が不足している状況なので、おかしな質問だと思いますが どうかご容赦ください。 フォームで利用するレコードセットについて、壁にぶつかっています。 Access97のフォームで普通に利用していた Set rs=Me.RecordsetClone これは、ADOでは、どのように置き換えを考えていけばよいのでしょうか? フォーム内のモジュールで、そのフォームに結びついている Recordsetの取り扱い方法について、一般的なルールのようなものを 教えていただけますと、ありがたいのですが・・・ 半日ほど、色々なサイトを検索してみたのですが どうにも答えが見つかりません。 そもそも、Access2000/2002フォームのRecordSetがDAOなのかADOなのかも 分かりません。 アドバイスや、参考になる書籍の情報などをいただけないでしょうか。 なにとぞ、よろしくお願いいたします。

  • ACCESS・VBAが全く分かりません。

    次のようなことをやるにはどういうコードを書けばいいですか? (患者情報テーブル) ID 氏名 1  阿部 2  伊藤 3  宇治 (表示フォーム) ID  1    氏名 阿部  表示フォームのIDを1から2へ変更したら、 自動的に氏名も阿部から伊藤へ変わってほしいのです。 これを実現する方法を教えて下さい。 それと、ユーザーが任意で指定できるのはIDだけにしたいので、 氏名はテキストボックスでなくてラベルで充分なのですが、 アクセスではラベルの表示をVBAで変えることはできるのでしょうか。 エクセルならそれができましたよね。

  • 異なるフォームに属する関数間でACCESSのレコードセットを受け渡しする。

    msAccess2000のVBAコードの質問です。 元々、全てを理解しているわけではないのにVBAコードを書いているのが無茶なんですが、無茶を承知でプログラミングしています。 あるクエリの結果を、あるフォームで帳票表示しています。この帳票の一レコードにボタンをつけて、クリックイベントで、そのレコードを取得しようとしています。フォームはこの後、閉じられた後、呼び出された親にその、レコードを渡したいのです。 フォームは、親フォームのボタンクリックイベントから、DoCmd.Openformメソッドによって呼び出されるので、戻り値は使えません。 しょうがないので、広域変数rst(DAO.Recordset型)で、受け渡そうと思ったのですが、recordset型は、どうやら参照のようで、フォーム(クエリ?)を閉じると、レコードが壊れてしまうようなのです。 Module1で、 public rst as DAO.recordset として、 Private Sub コマンド34_Click() set Module1.rst=me.recordset ' この中では、rst.fields(*)で、フィールドの値を使えるのですが・・・ END Sub 呼び出した親フォームでは、module1.rst.fields(*)を使用できません。 質問は二つあります。 1)広域変数rstは、上記のような宣言・使用法で問題ないですか? 2)sub またはfunction間にわたって、レコードを渡す、いい方法はないですか?

  • ACCESS/VBA 追加レコードが表示されない

    ACCESS 2003 で開発しています。 フォームのデータソースがテーブルAで、テーブルAの主キーはオートナンバーです。 フォーム上のボタンをクリックすると、追加クエリを実行して、テーブルAに1レコード追加し、 フォームにそのレコードを表示したいのですが、 クエリ実行前の最終レコードが表示されてしまいます。 テーブルAを見ると、オートナンバーがふられたレコードが末尾にちゃんと追加されています。 Dim dbs As Database Dim Qdf As QueryDef Set dbs = CurrentDb Set Qdf = dbs.QueryDefs("Q_データ追加2") ←追加クエリ Qdf.Execute Me.Refresh '* 最終レコードを表示 DoCmd.GoToRecord , , acLast どのようにすれば、直前に追加したレコードをフォームに表示できるのか おわかりの方がおられましたら、お教え下さい。ちなみに、ACCESSは、   「既定の開くモード 」:共有モード   「既定のレコードロック」:ロックしない      という設定になっています。 よろしくお願い致します。

  • アクセス2003 VBAについて

    アクセス2003VBA初心者ですが、誰が解る方詳しく教えていただけますか? 検索フォームで検索した結果を、別フォームに表示を行い、詳細ボタンを押下すると、選択したレコードの詳細フォームを開く すみません。質問事体が言葉らずかも知れませんが、よろしくお願いいたします。