在frmlastweeksactivities的数据输入表单中。当一行有" Gold"或" Silver"或者"青铜"作为[“活动类别”]字段/列中的内容,然后禁用列/字段[5]& [6]
当一行有" Wood"或者" Hay"或" Stubble"作为[“活动类别”]字段/列中的内容然后禁用列/字段[8]& [9]
禁用意味着在这种情况下不允许任何数据输入将它们变为红色
我正在尝试构建和表达,以便在表格验证规则属性中使用,或者在表单中的一个控制-txt框中使用
答案 0 :(得分:3)
编辑:使用表级验证的解决方案
表级解决方案不会禁用字段,它所做的就是在添加记录时验证记录。如果验证规则失败(评估为FALSE
),则将向用户显示警告消息,并且将取消更新(记录未添加)。
应将此表达式输入Validation Rule
表格属性中,如下所示:
IIf((([category]="gold" Or [category]="silver" Or [category]="bronze") And (Len([Field5])>0 Or Len([Field6])>0))
Or (([category]="Wood" Or [category]="stubble" Or [category]="hay") And (Len([Field8])>0 Or Len([Field9])>0))
,False,True)
警告:请确保支架按照上述表达方式排队!!
表达式很乱,但它测试你描述的2个“失败条件”中的任何一个是否为真,即:
1)类别=金/银/铜并且在Field5 / Field6
中不是空值2)Category = wood / stubble / hay而不是Field8 / Field9中的null值
然后在表属性表的Validation Text
属性中输入您希望通知用户其记录失败并需要更正的文本,然后才能保存记录。例如:
"If category is gold/silver/bronze then Field5 and Field6 must be blank, if wood/stubble/hay then Field8 and Field9 blank. Record not saved, please correct before saving."
以下是设计视图中表格的屏幕截图,显示了属性表和您需要更改的2个属性。
更好:使用事件驱动验证的解决方案&控制表格中的锁定
鉴于Access表级和字段级验证不能满足要求,该解决方案将在表单上使用事件驱动的验证。它假定您的表单包含名为category
,Field5
,Field6
,Field8
和Field9
的文本框控件。
在设计视图中使用表单,右键单击category
字段(或同时按ALT
和ENTER
)以查看控件的属性。在屏幕右侧的“属性表”中,单击Events
选项卡。这将显示所选控件的可能事件。请参见下面的屏幕截图。
您对After Update
事件感兴趣,因此请点击它,然后点击右边的...
。选择Code Builder
将为表单打开一个新的VBA模块,并自动为您创建一个事件。
Private Sub category_AfterUpdate()
' by default enable all four fields 5/6/8/9
Me.Field5.Enabled = True
Me.Field6.Enabled = True
Me.Field8.Enabled = True
Me.Field9.Enabled = True
' test the value entered by user in the category field and hide fields as required
Select Case Me.category
Case "Gold", "Silver", "Bronze"
' if the user has entered Gold, Silver or Bronze lock Fields 5/6
Me.Field5.Enabled = False
Me.Field6.Enabled = False
Case "Wood", "Stubble", "Hay"
' if the user has entered Gold, Silver or Bronze lock Fields 8/9
Me.Field8.Enabled = False
Me.Field9.Enabled = False
End Select
End Sub
因此,上面的代码将确保当用户更新category
字段时,Sub
和End Sub
之间的代码将会运行,并且此代码会为Enabled
属性设置根据你的逻辑你提到的字段。如果设置为Enabled
,则此False
属性将锁定字段变为活动状态(接受光标)并将其灰显,以便用户知道它已被禁用。
最后,当用户移动到新记录时,您需要再添加一段代码,将4个字段重置为Enabled
。因此,回到设计视图中的表单,通过单击表单的一部分而不是控件来访问Form
对象本身的属性。例如,单击表单页眉或页脚。当您看到表单的事件属性时,您将看到名为Current
的事件。这是您使用...
按钮以与上述相同的方式创建事件过程所需的过程。这将再次进入VBA窗口,您需要确保在那里输入以下代码:
Private Sub Form_Current()
' by default enable all four fields 5/6/8/9
Me.Field5.Enabled = True
Me.Field6.Enabled = True
Me.Field8.Enabled = True
Me.Field9.Enabled = True
End Sub
这是VBA屏幕应该如何显示其中所有代码的屏幕截图。
当您现在保存并运行表单时,它应该完全按照您的意愿运行。如有任何问题或疑问请发表评论,我会尽力协助。