我有一个主窗体和一个显示多个记录的子窗体 . 当在主窗体上选中复选框时,我希望更新子窗体上的所有“BoxLblTime”和“Material Arrived”字段 . 这是单击复选框时执行的vba代码:
Private Sub MaterialArrived_chkbx_Click()
Dim temp As Variant
Dim tempString As String
Dim ctl As Control
'If checkbox is checked
If Forms("JOBS Form").Controls("MaterialArrived_chkbx").Value < 0 Then
Dim rs As Object
'Get records of subform
Set rs = Forms("JOBS Form").[Order Form].Form.Recordset
'Loop until end
Do While Not rs.EOF
rs.Edit
'Update the two fields
rs![Material arrived] = True
rs!BoxLblTime = Now()
rs.Update
rs.MoveNext
Loop
Set rs = Nothing
End If
End Sub
使用此代码时有一些不寻常的行为:
1)选中主窗体上的复选框后,将在子窗体中更新这两个字段 . 但是,如果我取消选中子窗体上的复选框,然后重新检查主窗体复选框,则子窗体复选框保持未选中状态 .
2)选中主窗体上的复选框后,将更新这两个字段 . 但是,如果我取消选中子窗体上的复选框,移动到一组新的子窗体记录(下一个或后面)然后检查主窗体复选框,我收到错误:'3021'没有当前记录 .
为什么会出现这种不寻常的行为?
EDIT: 这是使用更新查询方法的代码:
Private Sub MaterialArrived_chkbx_Click()
If Forms("JOBS Form").Controls("MaterialArrived_chkbx").Value < 0 Then
With CurrentDb().QueryDefs("Update Orders")
.Parameters("[Material Arrived]").Value = True
.Parameters("[BoxLblTime]").Value = Now()
.Execute dbFailOnError
End With
Forms("JOBS Form").Form.Requery
End If
End Sub
但我收到“物品未找到收集”错误 .
1 回答
我建议另一种方法 .
创建更新查询并传递一个布尔参数,指示材料到达值 .