2016-10-13 8 views
0

私はその下にサブフォームを持つメインフォームを持っています。メインフォームには、txtComments内の値を入力できる「上書き」オプションがあり、チェックボックスがtrueの値(例:チェックされている)の場合のみサブフォームのフィールドに値を入力します。vba whileループが機能しない - アクセスフォーム

現状では、私はデータのみの選択行全体ではなく、サブフォームのデータセットのために働く、このコードを使用しています:

(注意:私は、フィールドと値の名前を簡略化しました)

Private Sub Command118_Click() 

    Dim rst As Recordset, i As Integer 

    Set rst = Subform.RecordsetClone 
    i = 0 
    rst.MoveFirst 
    Do While Not rst.EOF 
     i = i + 1 
     rst.Edit 

     If [SubformCheckbox] = True Then 
      [SubformComments] = [txtComments] 
     Else 
      [SubformComments] = 0 
     End If 

     rst.Update 
     rst.MoveNext 
    Loop 

    rst.Close 
    Set rst = Nothing 
End Sub 

答えて

0

間違った変数を使用しました。これを試してみてください:

If rst![SubformCheckbox] = True Then 
     rst![SubformComments] = [txtComments] 
    Else 
     rst![SubformComments] = 0 
    End If 

あなたは、このようなループを変更、チェックされていないレコードを触れないでくださいしたい場合は、次のパフォーマンス向上のために

With rst 
    Do While Not .EOF 
     If ![SubformCheckbox] = True Then 
      .Edit 
      ![SubformComments] = [txtComments] 
      .Update 
     End If 
     .MoveNext 
    Loop 
End With 

をすべて更新し、唯一の確認の行を残してレコードセットをフィルタリングすることができますそれらのループ内では、レコードセットをまったく使用せずにテーブルを直接更新するためにUPDATE SQLクエリを使用すると、最高のパフォーマンスに到達します。

+0

ありがとうSergeyはうまくいきました。 – NS01

+0

しかし、私はElseステートメントを既存のコメントフィールドだけを残すことができますか?例えば、 – NS01

+0

。真値のチェックボックスの行が見つかった場合は、TXTCommentフォームをメインフォームに追加します。それ以外の場合は何もしません。 – NS01

関連する問題