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 并且可供任何人使用。当您来自单选按钮或来自组合框时,这将使事情很好地链接起来。