【发布时间】:2015-08-07 23:29:34
【问题描述】:
我正在尝试为保险索赔创建 MS Access 中的表单。我有所有需要填写的字段,但我希望能够根据用户的某些操作启用或禁用这些字段。所以表单的流程是这样的:我在顶部有一个带有两个单选按钮的框架,一个用于单索赔事件,一个用于多索赔事件。如果用户单击单一声明按钮,一切都会继续进行,没有问题。如果用户单击多索赔事件按钮,一个组合框会出现在侧面,其中包含他们需要从中选择的 MultiClaim_Incident_ID 编号的下拉列表。我想要做的是,如果用户选择了 Multi-Claim Incident 按钮并且没有从下拉列表中选择事件 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
【问题讨论】:
-
当 Condition1 和 Condition2 都为 True 时,此表达式返回 True,或者当任一条件为 False 时返回 False:
Condition1 And Condition2此表达式将尝试将 Condition1 的等效字符串与 Condition2 的等效字符串连接:Condition1 & Condition2 -
测试
foo = Null是否永远不会返回 True,无论 foo 的值如何。使用IsNull(foo)检查 foo 是否为 Null。 -
所以您是说使用与号进行逻辑比较而不是输入“And”?另外,要清除其中可能包含文本的文本框,
Me.Incident_Date = Null是正确的方法,还是更好的做法是Me.Incident_Date = ""? -
没有。使用
And进行逻辑比较。与号进行连接,而不是逻辑比较。
标签: vba ms-access ms-access-2013