- ベストアンサー
Access 最後のレコードに到達するまでループ処理を行う方法
- フォームでボタンをクリックし、計上年度と計上月をすべてのレコードに入力する方法について教えてください。
- For~Next文でループ処理を行い、選択されているレコードが一番最初のレコードではない場合にエラーが発生します。
- 最後のレコードに到達するまでループ処理を行う方法を教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
うんそれでしたら、 Private Sub 計上年度月入力_Click() Dim RecSet As Recordset Dim strSQL As String strSQL = "SELECT * FROM 請求集計T" strSQL = strSQL & " WHERE クエリの条件式"←ここを注意してください。 Set RecSet = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset) RecSet.MoveFirst Do Until RecSet.eof If 計上月 = 0 Then RecSet.Edit RecSet.Fields("計上年度2") = 計上年度1 RecSet.Fields("計上月2") = 計上月1 RecSet.Update End If RecSet.MoveNext loop RecSet.close Set RecSet = Nothing End Sub ちなみに、計上年度2と計上月2はレコードフィールド、計上年度1と計上月1はフォームに配置されているテキストだと見なして作っています。
その他の回答 (4)
- PAPA0427
- ベストアンサー率22% (559/2488)
たぶん、「参照設定」でDAOが設定されてません。 VBAのエディター画面で「ツール」→「参照設定」で「Microsoft DAO 3.6 Object Library」にチェックを入れてください。なお、「3.6」の所はAccessのバージョンで違いますので、「Microsoft DAO X.X Object Library」で探されてください。 ちなみ私のバージョンはAccess2000です。
お礼
何度もご回答いただきまして、ありがごうございました。 残念ながら、DAOの設定をしても、同じエラーが出てしまいました。 ですが、教えていただいた構文からヒントを得て、最初に書いていたFor~Nestの前に、 「DoCmd.GoToRecord , , acFirst」 を追加してみたところ、うまく動くようになりました。 本当に丁寧にご回答いただきまして、ありがとうございました。 いろいろと勉強になりました。 また、どうぞよろしくお願いいたします。
- PAPA0427
- ベストアンサー率22% (559/2488)
う~ん、選択クエリで選択するための条件を設定されていると思うんです。選択クエリで、設定されている条件を「WHERE」句に記述すれば良いんです。 例えば、物品番号が1のものなら「物品番号=1」と書きます。さらに条件があるのなら「AND」(かつ)か「OR」(または)で繋いでいきます。 単純に日付が入っていない物であれば、「SELECT * FROM 請求集計T WHERE isnull 日付」なんて記述します。 単純に選択クエリに設定されているフィールドと条件がわかれば、一番いいんですが。
- PAPA0427
- ベストアンサー率22% (559/2488)
年次請求集計Qって、クエリテーブルですよね? どんなクエリでしょうか?う~んそれだったらいきなりSQLに変えるのも一つの手かなぁ。 ちょっとクエリの内容がわからないので、よろしかったら教えて下さい。
お礼
えーっと。 「年次請求集計Q」クエリは、データを入力するフォームのために作成した選択クエリです。 って、こういう答えじゃないのカナ。。。 「年次請求集計Q」に入力したデータは「請求集計T」というテーブルに格納されます。 クエリだと問題でしたら、テーブルを見に行けば解決されるのでしょうか??? ごめんなさい。多分基本がわかってないんですね。。。
- PAPA0427
- ベストアンサー率22% (559/2488)
Private Sub 計上年度月入力_Click() Dim RecSet As Recordset Set RecSet = CurrentDb.OpenRecordset("年次請求集計Q", dbOpenDynaset) RecSet.MoveFirst Do Until RecSet.eof If 計上月 = 0 Then 計上年度2 = 計上年度1 計上月2 = 計上月1 End If RecSet.MoveNext loop End Sub で出来ると思います。
お礼
ご回答、どうもありがとうございます! 早速、コピーして試してみたところ Set RecSet = CurrentDb.OpenRecordset("年次請求集計Q", dbOpenDynaset) のところで、エラーが出てしまいました。。。 うーむ。。どのようにしたらよいでしょう??? お手数ですが、お分かりになりましたら教えてください!!!
お礼
どうもありがとうございます! おっしゃるとおり、計上年度2と計上月2はレコードフィールド、計上年度1と計上月1はフォームに配置されています。 これだけの説明でお分かりになるとは。。。すごいですね。 (って私の説明不足ですみません。。。) で、おはずかしいですが。。。 "WHERE クエリの条件式"って何を入れたら良いのでしょう・・・? すみません。。。教えてください!!
補足
あ、計上年度と計上月に入力させるのは、請求集計Tのすべてのレコードを対象としてOKです。 ので、その場合はクエリの条件式は必要ないということでしょうか? その解釈でOKなら・・・ strSQL = strSQL & " WHERE クエリの条件式"←ここを注意してください。 の一文を削除して、実行してみたのですが、 RecSet.Edit のところで「メソッドまたはデータメンバが見つかりません」とのエラーが出てしまいます。 すみません。どうしてエラーが出てしまうのかわかりません。 何度も申し訳ありませんが、教えてください!!