Enable/Disable 具有特定条件的字段 MS Access
Enable/Disable Fields with certain criteria MS Access
我在 MS Access 中有一个表单,我正在尝试为保险索赔创建该表单。我有所有需要填写的字段,但我希望能够根据用户的某些操作启用或禁用这些字段。所以表格的流程是这样的:我在顶部有一个框架,上面有两个单选按钮,一个用于单项索赔事件,一个用于多项索赔事件。如果用户单击单一声明按钮,一切都会继续,没有问题。如果用户单击多项索赔事件按钮,旁边会出现一个组合框,其中包含他们需要 select 的 MultiClaim_Incident_ID 个号码的下拉列表。我想要做的是,如果用户 select 是多索赔事件按钮并且没有 select 下拉列表中的事件 ID 号(即保留默认值),那么表格的其余部分被禁用,直到更正并清除所有字段...
看起来应该很简单,但我似乎无法让它工作,我不确定是我的逻辑有问题还是什么。这是我的 VBA 代码的简化版本:
Private Sub Form_Load()
Me.SM_Frame.Value = 1
Me.MultiClaim_Drpdwn.Value = Null
End Sub
Private Sub SM_Frame_AfterUpdate()
If SM_Frame.Value = 1 Then
Me.MultiClaim_Incident_ID_Label.Visible = False
Me.MultiClaim_Drpdwn.Visible = False
ElseIf SM_Frame.Value = 2 Then
Me.MultiClaim_Incident_ID_Label.Visible = True
Me.MultiClaim_Drpdwn.Visible = True
ElseIf SM_Frame.Value = 2 & MultiClaim_Drpdwn.Value = Null Then
Me.Incident_Date = Null
Me.Incident_Date.Enabled = False
Me.Claimant_Name.Value = ""
Me.Claimant_Name.Enabled = False
//PATTERN CONTINUES FOR REST OF FIELDS//
MsgBox ("CLEAR EVERYTHING!!")
ElseIf SM_Frame.Value = 1 Then
Me.Incident_Date.Value = ""
Me.Incident_Date.Enabled = True
Me.Claimant_Name.Value = ""
Me.Claimant_Name.Enabled = True
//PATTERN CONTINUES FOR REST OF FIELDS//
MsgBox ("Everything can continue as is")
End If
End Sub
在 "elseif" 系列中,一旦条件为真,其余条件将被忽略。
那么,你的
ElseIf SM_Frame.Value = 2 & MultiClaim_Drpdwn.Value = Null Then
从未达到,因为你有
ElseIf SM_Frame.Value = 2 Then
之前。
同理,MsgBox后面的"ElseIf SM_Frame.Value = 1 Then"完全没有用,因为它被"If SM_Frame.Value = 1 Then"
隐藏
尝试使用逐步调试模式来查看。
我要说的是,正确处理这些序列一点都不简单!所以不要因为第一次尝试没有成功而难过。我必须大约每个月创建一次这样的东西,并且仍然需要大量尝试,直到它在所有情况下都能正常工作。
尝试将问题分开:
您已经 SM_Frame_AfterUpdate()
。在其中执行您必须处理从值 1 到 2 的更改,即使组合框可见,但停在那里。你不知道只有 SM_Frame
的信息字段会发生什么,你需要等待 MultiClaim_Drpdwn
。此外,执行从 2 到 1 所需的操作,即隐藏 Combobox。
接下来,创建一个 AfterUpdate 处理程序 MultiClaim_Drpdwn_AfterUpdate()
。使用THAT根据其值处理字段(enable/disable,设置为空)。
一旦准备就绪,就只剩下一些边缘情况了。例如,您希望字段在更改 SM_Frame 后立即表现得像 MultiClaim_Drpdwn_AfterUpdate()
状态。一旦你明白你可以从 SM_Frame_AfterUpdate()
中愉快地调用 MultiClaim_Drpdwn_AfterUpdate()
,这就很容易了,最好在最后完成。这些事件处理程序仍然只是普通功能,已经 public 并且可供任何人使用。当您来自单选按钮或来自组合框时,这将使事情很好地链接起来。
我在 MS Access 中有一个表单,我正在尝试为保险索赔创建该表单。我有所有需要填写的字段,但我希望能够根据用户的某些操作启用或禁用这些字段。所以表格的流程是这样的:我在顶部有一个框架,上面有两个单选按钮,一个用于单项索赔事件,一个用于多项索赔事件。如果用户单击单一声明按钮,一切都会继续,没有问题。如果用户单击多项索赔事件按钮,旁边会出现一个组合框,其中包含他们需要 select 的 MultiClaim_Incident_ID 个号码的下拉列表。我想要做的是,如果用户 select 是多索赔事件按钮并且没有 select 下拉列表中的事件 ID 号(即保留默认值),那么表格的其余部分被禁用,直到更正并清除所有字段...
看起来应该很简单,但我似乎无法让它工作,我不确定是我的逻辑有问题还是什么。这是我的 VBA 代码的简化版本:
Private Sub Form_Load()
Me.SM_Frame.Value = 1
Me.MultiClaim_Drpdwn.Value = Null
End Sub
Private Sub SM_Frame_AfterUpdate()
If SM_Frame.Value = 1 Then
Me.MultiClaim_Incident_ID_Label.Visible = False
Me.MultiClaim_Drpdwn.Visible = False
ElseIf SM_Frame.Value = 2 Then
Me.MultiClaim_Incident_ID_Label.Visible = True
Me.MultiClaim_Drpdwn.Visible = True
ElseIf SM_Frame.Value = 2 & MultiClaim_Drpdwn.Value = Null Then
Me.Incident_Date = Null
Me.Incident_Date.Enabled = False
Me.Claimant_Name.Value = ""
Me.Claimant_Name.Enabled = False
//PATTERN CONTINUES FOR REST OF FIELDS//
MsgBox ("CLEAR EVERYTHING!!")
ElseIf SM_Frame.Value = 1 Then
Me.Incident_Date.Value = ""
Me.Incident_Date.Enabled = True
Me.Claimant_Name.Value = ""
Me.Claimant_Name.Enabled = True
//PATTERN CONTINUES FOR REST OF FIELDS//
MsgBox ("Everything can continue as is")
End If
End Sub
在 "elseif" 系列中,一旦条件为真,其余条件将被忽略。
那么,你的
ElseIf SM_Frame.Value = 2 & MultiClaim_Drpdwn.Value = Null Then
从未达到,因为你有
ElseIf SM_Frame.Value = 2 Then
之前。
同理,MsgBox后面的"ElseIf SM_Frame.Value = 1 Then"完全没有用,因为它被"If SM_Frame.Value = 1 Then"
隐藏尝试使用逐步调试模式来查看。
我要说的是,正确处理这些序列一点都不简单!所以不要因为第一次尝试没有成功而难过。我必须大约每个月创建一次这样的东西,并且仍然需要大量尝试,直到它在所有情况下都能正常工作。
尝试将问题分开:
您已经 SM_Frame_AfterUpdate()
。在其中执行您必须处理从值 1 到 2 的更改,即使组合框可见,但停在那里。你不知道只有 SM_Frame
的信息字段会发生什么,你需要等待 MultiClaim_Drpdwn
。此外,执行从 2 到 1 所需的操作,即隐藏 Combobox。
接下来,创建一个 AfterUpdate 处理程序 MultiClaim_Drpdwn_AfterUpdate()
。使用THAT根据其值处理字段(enable/disable,设置为空)。
一旦准备就绪,就只剩下一些边缘情况了。例如,您希望字段在更改 SM_Frame 后立即表现得像 MultiClaim_Drpdwn_AfterUpdate()
状态。一旦你明白你可以从 SM_Frame_AfterUpdate()
中愉快地调用 MultiClaim_Drpdwn_AfterUpdate()
,这就很容易了,最好在最后完成。这些事件处理程序仍然只是普通功能,已经 public 并且可供任何人使用。当您来自单选按钮或来自组合框时,这将使事情很好地链接起来。