- ベストアンサー
accessでのレコード移動について
いつもお世話になっています。 アクセス初心者です。宜しくお願い致します。 現在、アクセスを用いて納品書を作成しています。 フォームにお客様情報、サブフォームに納品品目情報を入力。 フォームヘッダーに印刷ボタンを作り、納品書を印刷すると同時に、 そのレコードの印刷済みチェックボックスがオンになる 仕様になっているのですが、 情報を入力してもすぐその日には印刷をせず、 のちに、その印刷をしていないレコードを表示させて、 あらたに情報を追加入力後、改めて印刷をする事があります。 そこで質問なのですが、 今回、このフォームに検索ボタンを作り、 印刷済みチェックボックスがオフになっているレコードを 表示させようと思うのですが、どのようにしたらよいのでしょうか? ボタンを押すごとにまだ印刷していないデータだけが 次々表示されるボタンの作り方をご教授願えればと思います。 どうか宜しくお願い致します。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 メインフォームの基になるテーブルに「印刷済み」フィールド(Yes/No型)があるとします。 また、メインフォームにコマンドボタン(名前:未印刷検索)があるとします。 このコマンドボタンの「クリック時」イベントに下記のコードをコピペしてください。 これで希望通りの動作になると思います。 Private Sub 未印刷検索_Click() Dim Rs As Recordset Set Rs = Me.RecordsetClone Rs.FindNext "[印刷済み] = False" If Rs.NoMatch Then MsgBox "未印刷レコードの検索は終了しました。" Rs.MoveFirst End If Me.Bookmark = Rs.Bookmark End Sub ※Rs.MoveFirst のかわりに Rs.FindFirst "[印刷済み] = False" でも良いかもしれません。
その他の回答 (4)
- bonaron
- ベストアンサー率64% (482/745)
> Rs.FindNext "[印刷済み] = False" の > .FindNext の部分が青く表示されてしまいます。 Private Sub 未印刷検索_Click() Dim Rs As DAO.Recordset としてみてください。 参照設定で、DAO3.6 にチェックをお忘れなく。 ところで、Accessは Adp なのですか?
お礼
できました!感動です!! 初心者なもので、VBAの構文の意味など全然解らないですが(苦笑)。 とくにDAOやらDOAは何が何やら… 設定の DAO3.6 にチェック入れて完了でした。 adpの意味もわかってません…スミマセン。 もっともっと勉強しないとダメですね。 ですが、本当に感謝しています。 どうもありがとうございました。
- GreatDragon
- ベストアンサー率46% (186/402)
#3 です。 読み返してみたら、これ↓は不要でした。 ※Rs.MoveFirst のかわりに Rs.FindFirst "[印刷済み] = False" でも良いかもしれません。
- O_cyan
- ベストアンサー率59% (745/1260)
>検索ボタンを作り印刷済みチェックボックスがオフになっているレコードを表示させようと思う 検索ボタンにフォームのレコードソースを変更させるようにすれば出来るのですが・・。 印刷済みチェックボックスあるレコードは納品書テーブルのレコードですよね。 メインフォームがお客様情報テーブルをレコードソースでサブフォームが納品書テーブルのレコードソースになっている場合だとサブフォームのレコードソースはストアドプロシージャなのでフォーム同士のリンクを無視してメインとサブフォームが同期しなくなってしまいます。 フォームのレコードソースのこの辺はどうでしょうか? この場合だとストアドプロシージャを新規に作ったりメインとサブを同期させるようしたりと手間がかかります。 印刷済みチェックがオフになっているレコードを検索し一覧表示するフォームを別に作りそこから納品書のフォームを表示させて納品書を出力する方が簡単です。 印刷済みチェックがオフのレコードを抽出するクエリを作り、そのクエリを元に帳票フォームで一覧フォームを作り納品書フォームを開くボタンを配置して特定のレコードを表示するにして関連付けすれば出来ます。 納品書フォームが納品書テーブルのレコードと上手くリンクできない場合は印刷用のフォームを作らなくてはいけませんが。 この処理を納品書に作ったボタンにマクロでも作り設定するのが簡単だと思います。
お礼
ご回答ありがとうございます。 ストアドプロシージャというものがまだ勉強不足でわかりませんが、 やはりサブフォームがあると難しくなってしまうのでしょうか? なるほど、あらたにフォームを作るという方法もありですね。 参考にしてみたいと思います。 ご丁寧にありがとうございました。
- yume_no_ato
- ベストアンサー率15% (24/154)
わかりやすく説明しようと思います。 1.フォームにボタンを作成する 2.プロパティ-イベント-クリック時 3.「...」ボタンを押し 4.マクロビルダにて、マクロを作成 5.アクション欄に「フィルタの実行」を選ぶ 6.画面下にあるWhere条件式の欄に 「[チェック]=False」と入力する ([チェック]←は、フィールド名) 7.保存し閉じる こんな感じで、いかがでしょうか。 確認、よろしくお願いします。
お礼
早速のご回答ありがとうございます。 ですが、教えて頂いた通りにやったのですが、 うまく機能しません。 実行してもレコードが移動せず、 メインフォーム、サブフォームのレコードの先頭のデータが 空になる(消える?)という、おかしな現象になります。 やはり、サブフォームがあると難しいのでしょうか? 一番簡単にできそうだっただけに残念です。 丁寧なご説明ありがとうございました。 とりあえず、他の方の方法を試してみますね。
お礼
ご回答ありがとうございます。 さっそく試したところ、 コンパイルエラー 「メソッドまたはデータメンバがみつかりません。」と表示され、 Rs.FindNext "[印刷済み] = False" の .FindNext の部分が青く表示されてしまいます。 メインフォームの基になるテーブルに「印刷済み」フィールドはあります。 何が原因なのでしょうか? どうか宜しくお願い致します。