プロが教えるわが家の防犯対策術!

いつもお世話になってます。
フォームAにサブフォームを2つ(サブ1とサブ2)を配置しています。
サブ2の紹介者コードが更新されたら、サブ1の会員コードを参照して、テーブル”紹介”に以下のデータを追加するようにVBAを書いています。サブ1は家族データで世帯コードで世帯主を判断、サブ2は紹介者データ。

サブ2の紹介者コード:
Private Sub 紹介者コード_AfterUpdate()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("紹介")
With forms!フォームA!サブ1.Form.RecordsetClone
.MoveFirst
Do Until .EOF
With rs
If !世帯コード <> 1 Then '世帯主はすでに登録済み
.AddNew
.Fields("会員コード").Value = !会員コード
.Fields("紹介者コード").Value = Me.紹介者コード
.Update
End If
End With
.MoveNext
Loop
End With

rs.Clone
Set rs = Nothing
db.Close
Set db = Nothing
End Sub

これを実行すると、サブ1のrecordsetcloneのメンバー(!世帯コードと!会員コード)が
実行時エラー’3265’ このコレクションには項目がありませんとエラーになる。

別なフォームで親側からサブフォームを参照するのには問題ありません。
サブフォームから別なサブフォームの内容を参照するには、何か工夫がいるのでしょうか?

よろしくお願いします。

A 回答 (1件)

この


With rs

End With
の中の、!世帯コード、!会員コード、などの
「親」(と言ってよいのかわからないが)は
すべて、rs、つまり"紹介"を指定していることになります。

Private Sub 紹介者コード_AfterUpdate()
  Dim db As DAO.Database
  Dim rs As DAO.Recordset,rs2 as dao.recordset
  Set db = CurrentDb
  Set rs = db.OpenRecordset("紹介")
  set rs2=forms!フォームA!サブ1.Form.RecordsetClone
  rs2.MoveFirst
  Do Until rs2.EOF
    With rs
      If rs2!世帯コード <> 1 Then '世帯主はすでに登録済み
      .AddNew
      .Fields("会員コード").Value = rs2!会員コード
      .Fields("紹介者コード").Value = Me.紹介者コード
      .Update
      End If
    End With
    .MoveNext
  Loop
後略
では?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
set recordsetとwithとの関係がよく理解できていませんね。
ご指摘の内容で動作出来ました。(.MoveNextは、rs2.MoveNextに修正して)
早々の解決で、助かります。ありがとうございます。

お礼日時:2015/05/19 07:36

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

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