问题描述
我创建了一个表单来输入培训活动。 我的表单顶部有一个未绑定的计算控件,它反映了培训的状态。计算控制源:
=IIf(IsNull([Txt_TrainComm]),"NEW",IIf(IsNull([Txt_TrainComp]),"COMMENCED",IIf(IsNull([txtAssNom]),"ASSESSMENT required",IIf(IsNull([txtAssComp]),"ASSESSMENT - NOMINATED","ASSESSED"))))
我的表单有几个关键日期(文本框名称:txt_TrainComm、txt_TrainComp、txtAssNom 和 txtAssComp)要按该顺序输入。我想要发生的是在输入日期时启用其他表单控件,使页脚可见等。我编写了一个代码,当从一个记录切换到下一个记录时,将其放置在表单当前事件中时可以正常工作。请在下面查看我的代码:
Private Sub Form_Current()
If Me.StatusName = "NEW" Then
Me.StatusName.Width = 1418
Me.Txt_TrainComp.Enabled = False
Me.Txt_TrainComm.Enabled = True
Me.Page_Assessment.Enabled = False
If Me.FormFooter.Visible = True Then
Me.FormFooter.Visible = False
Me.cmdshowdetails__.Caption = "Show Assessment <<"
Dim WindowHeightNEW As Long
WindowHeightNEW = Me.WindowHeight - Me.FormFooter.Height
Me.Move Left:=Me.WindowLeft,Top:=Me.WindowTop,Height:=WindowHeightNEW
End If
End If
If Me.StatusName = "COMMENCED" Then
Me.StatusName.Width = 2552
Me.Txt_TrainComp.Enabled = True
Me.Txt_TrainComm.Enabled = True
Me.Page_Assessment.Enabled = False
If Me.FormFooter.Visible = True Then
Me.FormFooter.Visible = False
Me.cmdshowdetails__.Caption = "Show Assessment <<"
Dim WindowHeightCOMM As Long
WindowHeightCOMM = Me.WindowHeight - Me.FormFooter.Height
Me.Move Left:=Me.WindowLeft,Height:=WindowHeightCOMM
End If
End If
If Me.StatusName = "ASSESSMENT required" Then
Me.StatusName.Width = 4253
Me.Txt_TrainComp.Enabled = True
Me.Txt_TrainComm.Enabled = True
Me.Page_Assessment.Enabled = True
If Me.FormFooter.Visible = False Then
Me.FormFooter.Visible = True
Me.cmdshowdetails__.Caption = "Hide Assessment <<"
Dim WindowHeightASSREQ As Long
WindowHeightASSREQ = Me.WindowHeight + Me.FormFooter.Height
Me.Move Left:=Me.WindowLeft,Height:=WindowHeightASSREQ
End If
End If'
If Me.StatusName = "ASSESSMENT - NOMINATED" Then
Me.StatusName.Width = 4925
Me.Txt_TrainComp.Enabled = False
Me.Txt_TrainComm.Enabled = False
Me.Page_Assessment.Enabled = True
If Me.FormFooter.Visible = False Then
Me.FormFooter.Visible = True
Me.cmdshowdetails__.Caption = "Hide Assessment <<"
Dim WindowHeightASSNOM As Long
WindowHeightASSNOM = Me.WindowHeight + Me.FormFooter.Height
Me.Move Left:=Me.WindowLeft,Height:=WindowHeightASSNOM
End If
End If
If Me.StatusName = "ASSESSED" Then
Me.StatusName.Width = 1985
Me.Txt_TrainComp.Enabled = False
Me.Txt_TrainComm.Enabled = False
Me.Page_Assessment.Enabled = True
If Me.FormFooter.Visible = False Then
Me.FormFooter.Visible = True
Me.cmdshowdetails__.Caption = "Hide Assessment <<"
Dim WindowHeightASSD As Long
WindowHeightASSD = Me.WindowHeight + Me.FormFooter.Height
Me.Move Left:=Me.WindowLeft,Height:=WindowHeightASSD
End If
End If
End Sub
我无法开始工作,将代码放置在正确的控制事件中,例如,当在 txt_TrainComp 中输入日期时,代码会动态运行。我必须切换到不同的记录,然后返回以使更改生效,这不是预期的结果。我尝试过 BeforeUpdate、AfterUpdate、OnDirty、OnChange,但它们似乎不起作用。
有人可以看看我需要做的事件或代码更改并提出建议吗?希望我提供了足够的信息。
提前致谢。
解决方法
感谢 RetiredGeek,FormObject_LostFocus() 是在焦点改变后运行代码的正确事件。
Private Sub Txt_TrainComm_LostFocus()
Call FormUpdate
Me.TrainingStatus.Value = Me.StatusName
End Sub
Private Sub Txt_TrainComp_LostFocus()
Call FormUpdate
Me.TrainingStatus.Value = Me.StatusName
End Sub
Private Sub txtAssComp_LostFocus()
Call FormUpdate
Me.TrainingStatus.Value = Me.StatusName
End Sub
Private Sub txtAssNom_LostFocus()
Call FormUpdate
Me.TrainingStatus.Value = Me.StatusName
End Sub