この人頭いいなと思ったエピソード

いつもお世話になっております。

フォームでボタンをクリックすると、
計上年度と計上月をすべてのレコードに入力させようとしています。
下記のように、For~Nextで書いてみたのですが、
選択されているレコードが、一番最初のレコードではない場合、
エラーが返ってしまいます。
おそらく「レコードの数分繰り返す」という書き方のせいだと思います。
これを「最後のレコードに到達するまで」としたいのですが、
どのように書いたらよいでしょう??

ご存知の方がいらっしゃいましたら、教えてください。

Private Sub 計上年度月入力_Click()
Dim Max As Integer
Dim i As Integer
Max = DCount("[計上月]", "年次請求集計Q")

For i = 1 To Max

If 計上月 <> 0 Then
DoCmd.GoToRecord , , acNext
Else
計上年度2 = 計上年度1
計上月2 = 計上月1
DoCmd.GoToRecord , , acNext
End If
Next i
End Sub

A 回答 (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はフォームに配置されているテキストだと見なして作っています。

この回答への補足

あ、計上年度と計上月に入力させるのは、請求集計Tのすべてのレコードを対象としてOKです。
ので、その場合はクエリの条件式は必要ないということでしょうか?

その解釈でOKなら・・・
strSQL = strSQL & " WHERE クエリの条件式"←ここを注意してください。
の一文を削除して、実行してみたのですが、
RecSet.Edit
のところで「メソッドまたはデータメンバが見つかりません」とのエラーが出てしまいます。

すみません。どうしてエラーが出てしまうのかわかりません。
何度も申し訳ありませんが、教えてください!!

補足日時:2003/12/17 18:19
    • good
    • 0
この回答へのお礼

どうもありがとうございます!

おっしゃるとおり、計上年度2と計上月2はレコードフィールド、計上年度1と計上月1はフォームに配置されています。
これだけの説明でお分かりになるとは。。。すごいですね。
(って私の説明不足ですみません。。。)

で、おはずかしいですが。。。
"WHERE クエリの条件式"って何を入れたら良いのでしょう・・・?

すみません。。。教えてください!!

お礼日時:2003/12/17 18:11

たぶん、「参照設定」でDAOが設定されてません。



VBAのエディター画面で「ツール」→「参照設定」で「Microsoft DAO 3.6 Object Library」にチェックを入れてください。なお、「3.6」の所はAccessのバージョンで違いますので、「Microsoft DAO X.X Object Library」で探されてください。

ちなみ私のバージョンはAccess2000です。
    • good
    • 0
この回答へのお礼

何度もご回答いただきまして、ありがごうございました。

残念ながら、DAOの設定をしても、同じエラーが出てしまいました。
ですが、教えていただいた構文からヒントを得て、最初に書いていたFor~Nestの前に、
「DoCmd.GoToRecord , , acFirst」 を追加してみたところ、うまく動くようになりました。

本当に丁寧にご回答いただきまして、ありがとうございました。
いろいろと勉強になりました。
また、どうぞよろしくお願いいたします。

お礼日時:2003/12/18 09:59

う~ん、選択クエリで選択するための条件を設定されていると思うんです。

選択クエリで、設定されている条件を「WHERE」句に記述すれば良いんです。

例えば、物品番号が1のものなら「物品番号=1」と書きます。さらに条件があるのなら「AND」(かつ)か「OR」(または)で繋いでいきます。

単純に日付が入っていない物であれば、「SELECT * FROM 請求集計T WHERE isnull 日付」なんて記述します。

単純に選択クエリに設定されているフィールドと条件がわかれば、一番いいんですが。
    • good
    • 0

年次請求集計Qって、クエリテーブルですよね?



どんなクエリでしょうか?う~んそれだったらいきなりSQLに変えるのも一つの手かなぁ。

ちょっとクエリの内容がわからないので、よろしかったら教えて下さい。
    • good
    • 0
この回答へのお礼

えーっと。
「年次請求集計Q」クエリは、データを入力するフォームのために作成した選択クエリです。
って、こういう答えじゃないのカナ。。。

「年次請求集計Q」に入力したデータは「請求集計T」というテーブルに格納されます。
クエリだと問題でしたら、テーブルを見に行けば解決されるのでしょうか???

ごめんなさい。多分基本がわかってないんですね。。。

お礼日時:2003/12/17 17:28

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
で出来ると思います。
    • good
    • 0
この回答へのお礼

ご回答、どうもありがとうございます!

早速、コピーして試してみたところ
Set RecSet = CurrentDb.OpenRecordset("年次請求集計Q", dbOpenDynaset)

のところで、エラーが出てしまいました。。。
うーむ。。どのようにしたらよいでしょう???

お手数ですが、お分かりになりましたら教えてください!!!

お礼日時:2003/12/17 17:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A