有什么方法可以控制在表单和子表单上计算的控件的计算顺序?

时间:2018-07-17 14:08:30

标签: access-vba ms-access-2013

我在选项卡控件中的子窗体上有许多计算得出的控件。子表单是显示生产活动截止日期的清单,以及显示活动是否完成的复选框。每个子窗体都有两个隐藏的文本控件txtAllDone和txtActionDate,它们保存下一个活动的到期日期和活动名称。这些是在子窗体的onCurrent事件期间计算的。如果子窗体上的所有活动均已完成,则txtAllDone控件设置为“是”,而txtActionDate设置为null。

在父选项卡控件上,有两个可见的文本控件,它们显示下一个到期的活动(txtNextAction)及其到期日期(txtDueDate)。
通过检查每个子表单并计算父表单的OnCurrent事件中的数据来解决此问题。但是,父表单上txtdueDate中显示的日期通常是1900年,因为它完成并加载了子表单完成加载之前的日期。我尝试重新查询作为父表单OnCurrent一部分的清单,以确保子表单已加载并具有正确的数据,但这没有任何区别。

有什么方法可以指示何时计算控件? 这是父表单OnCurrent事件中的代码-

'update the checklists
Me.Contract_Sales_Checklist.Requery
Me.Contract_Eng_Checklist.Requery
Me.Contract_Production_Checklist.Requery
Me.Contract_Client_Checklist.Requery

'update the Next Action box on the checklist
If Me.ContractStatus = "Cancelled" Or IsNull(Me.ContractNo) Then
Me.txtNextAction = Null
Me.txtDueDate = Null
Else

If (Me.[contract sales checklist].Form.txtAllDone = "Yes" And
    Me.[Contract Eng Checklist].Form.txtAllDone = "Yes" And
    Me.[Contract Production Checklist].Form.txtAllDone = "Yes" And
    Me.[Contract Client Checklist].Form.txtAllDone = "Yes") Then
    Me.txtNextAction = "All actions completed"
    Me.txtDueDate = Null
Else
    If Me.[Contract Client Checklist].Form.txtAllDone <> "Yes" Then
    Me.txtNextAction = Me.[Contract Client Checklist].Form.txtAllDone
    Me.txtDueDate = Me.[Contract Client Checklist].Form.txtActionDate
    End If

    If Me.[Contract Production Checklist].Form.txtAllDone <> "Yes" And
    (Me.[Contract Production Checklist].Form.txtActionDate < Me.txtDueDate Or
    IsNull(Me.txtDueDate)) Then
        Me.txtNextAction = Me.[Contract Production Checklist].Form.txtAllDone
        Me.txtDueDate = Me.[Contract Production Checklist].Form.txtActionDate
    End If

    If Me.[Contract Eng Checklist].Form.txtAllDone <> "Yes" And
    (Me.[Contract Eng Checklist].Form.txtActionDate < Me.txtDueDate Or
    IsNull(Me.txtDueDate)) Then
        Me.txtNextAction = Me.[Contract Eng Checklist].Form.txtAllDone
        Me.txtDueDate = Me.[Contract Eng Checklist].Form.txtActionDate
    End If

    If Me.[contract sales checklist].Form.txtAllDone <> "Yes" And
    (Me.[contract sales checklist].Form.txtActionDate < Me.txtDueDate Or
    IsNull(Me.txtDueDate)) Then
        Me.txtNextAction = Me.[contract sales checklist].Form.txtAllDone
        Me.txtDueDate = Me.[contract sales checklist].Form.txtActionDate
    End If
End If
End If
me.repaint

0 个答案:

没有答案