実現したいこと
Access(2007-2016)で受注管理DBを作成しています。
サブフォーム付きフォームで受注明細から請求明細への転記を行いたいのですが、サブフォームのレコードが最初の1レコードしか転記できません。この問題を解決したく質問させていただきました。
「T_受注」と「T_受注明細」は受注Noで、「T_請求」と「T_請求明細」は請求Noでリレーションを組んでいます。
※「●」は主キー
1.T_受注---------------
●受注No:オートナンバー
契約日:日付
クライアントID:数値
2.T_受注明細-------------
●受注No:数値
●タスクID:数値
予算額:数値
3.T_請求---------------
●請求No:オートナンバー
請求日:日付
クライアントID:数値
4.T_請求明細-------------
●請求No:数値
●業務内容:テキスト
予算額:数値
〇「T_受注」がメインフォーム「F_受注」、「T_受注明細」がサブフォーム「SF_受注明細」になったフォーム
※メインフォームの「受注No」がクライアント名に、サブフォームの「タスクID」が業務内容になっていますが、表示上そう見せているだけです。
Private Sub 請求に転記_Click() Dim rs As DAO.Recordset Dim No As Long Dim i As Long, j As Long '請求に追加 Set rs = CurrentDb.OpenRecordset("T_請求", dbOpenDynaset) rs.AddNew No = rs![請求No] rs![クライアントID] = Me![クライアントID] rs![請求日] = Me![契約日] rs.Update rs.Close Set rs = Nothing MsgBox "「T_受注」から「T_請求」へ転記しました。" 'サブフォームへフォーカスを移動 Forms![F_受注]![SF_受注明細].SetFocus '請求明細に追加 Set rs = CurrentDb.OpenRecordset("T_請求明細", dbOpenDynaset) j = DCount("*", "T_受注明細", "[受注No]=" & Me![受注No] & "") i = 1 Do Until i = j + 1 rs.AddNew rs![請求No] = No Select Case Me![SF_受注明細]![タスクID] Case Is = 1 rs![業務内容] = "業務A" Case Is = 2 rs![業務内容] = "業務B" Case Else rs![業務内容] = "その他" End Select rs![予算額] = Me![SF_受注明細]![予算額] rs.Update MsgBox "転記しました" On Error Resume Next DoCmd.GoToRecord acDataForm, , acNext i = i + 1 Loop rs.Close Set rs = Nothing End Sub
これでボタンを押し転記を試みたところ、以下のようになりました。
・メインフォーム部分、「T_受注」から「T_請求」への転記は成功
・サブフォーム部分、「T_受注明細」から「T_請求明細」への転記は、最初の1レコードのみ成功
例)写真でいうと、受注Noが2、業務内容がクレーム処理、予算が55のレコードのみ転記が成功している
おそらく以下の部分が問題だと思うのですが、解決方法がわかりません。
「MsgBox "転記しました"」の表示回数はきちんと繰り返されている(今回の例でいうと3回表示される)ので、Do Loop自体は想定通り動いているようなのですが…。
Do Until i = j + 1 rs.AddNew rs![請求No] = No Select Case Me![SF_受注明細]![タスクID] Case Is = 1 rs![業務内容] = "業務A" Case Is = 2 rs![業務内容] = "業務B" Case Else rs![業務内容] = "その他" End Select rs![予算額] = Me![SF_受注明細]![予算額] rs.Update MsgBox "転記しました" On Error Resume Next DoCmd.GoToRecord acDataForm, , acNext i = i + 1 Loop
こちらどのように修正すればよいのでしょうか。
お力添えのほど、よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー