重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

ACCESS 入力フォームでテーブルへデータを複数追加したいと考えているのですが、
自力で解決出来ないので、アドバイスお願いします。

現在、工数取得の為の入力フォームを作成しています。

工数の取得はまとめて取得し、かかった工数を台数で割ってクエリで抽出したいと考えています。
最大5台分までで、作業によっては1台や2台でもデータを保存できるように1つのテーブルに入れたいのですが、1台入力すると4台分が空白で保存されてしまいます。
また、保存した後に、次のレコードに進んで新規で入力したいのですが、保存したレコードが表示されたままで、次のレコードに進む事が出来ません。

当方、アクセス勉強して間もないので知識や定義を理解していない部分があるのですが、アドバイスお願いします。

例)
☆ 入力フォーム
________________________________________________________
本体シリアル [0001] [0002] [0003] [0004] [0005]
作業者 [山田太郎]
開始時間 [9:00]
終了時間 [9:30]
台数 [5]

[ 保存 ]
_______________________________________________________________


☆ テーブルデータ
_______________________________________________________________
山田太郎 0001 9:00 9:30
山田太郎 0002 9:00 9:30
山田太郎 0003 9:00 9:30
山田太郎 0004 9:00 9:30
山田太郎 0005 9:00 9:30
_______________________________________________________________

コード

Dim rs As DAO.RecordSet
Set rs = CurrentDB.OpenRecordset("テーブル名")
For i = 1 to 5
rs.AddNew
rs!シリアル = Me("シリアル" & i).Value
rs!開始時間 = Me("開始時間").Value
rs!終了時間 = Me("終了時間").Value
rs!台数 = Me("台数").Value

If Me("シリアル" & i).Value = "" Then Exit For

rs.Update
Next
rs.Close
Set rs = Nothing
Me.Refresh

DoCmd.RunCommand acCmdSaveRecord
DoCmd.GoToRecord acDataForm, "工数フォーム", acNext

質問者からの補足コメント

  • とても丁寧な説明ありがとうございます。

    もう1つ質問なんですが、保存後に新規レコードに移動して、次のデータを入力したいのですが、次のレコードに移動してくれません。
    コードに記述してある方法で、どこが間違いなのか教えて頂けないでしょうか。

    No.1の回答に寄せられた補足コメントです。 補足日時:2016/10/03 20:48

A 回答 (1件)

シリアル欄が空白かどうかを判断する方法が間違っています。


Access のテキストボックスの場合、未入力だと値は Null になります。
場合によっては "" (空の文字列) の場合もあります。
従いまして以下のように Nz 関数を使って Null を空の文字列に変換してから判断してみてください。
If Nz(Me("シリアル" & i).Value, "") = "" Then Exit For

そして、この判断を行う場所は For の直後 (AddNew する前) でいいと思います。
For i = 1 To 5
 If Nz(Me("シリアル" & i).Value, "") = "" Then Exit For
 rs.AddNew
 ・・・
 rs.Update
Next

ただし質問文のコードでは
[シリアル001] ← 入力した
[シリアル002] ← 空欄
[シリアル003] ← 入力した
という入力パターンがあった場合 [シリアル002] 以降は保存されません。
もしこのように歯抜け入力もあるのであれば、

For i = 1 To 5
 If Not(Nz(Me("シリアル" & i).Value, "") = "") Then
  rs.AddNew
  ・・・
  rs.Update
 End If
Next

というようにすると良いかと。
この回答への補足あり
    • good
    • 0

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