如何在 Microsoft Access 表单中创建分支 logic/skipping 规则?

How do you create branching logic/skipping rules in a Microsoft Access form?

我正在使用 table 和相应的表单创建一个非常简单的 Access 数据库。对于表单上的一些问题,我想禁用以下问题,或者使用分支逻辑隐藏它们。

例如,在我的表单中,我有一个组合框问题,询问:您是吸烟者吗? - “是”、“否”、“不想回答”。下面的问题是:如果是,您抽烟的频率是多少?如果他们对第一个问题选择“否”或“不想回答”,那么我不希望第二个问题是 visible/enabled.

我一直在寻找一种方法来做到这一点,最简单的方法似乎是设置文本框的可见 属性“如果是,您多久抽一次烟?”到否。之后,我去质疑“你是吸烟者吗?”并转到“属性”菜单中的“事件过程”​​。这将打开一个 VBA 代码编辑器,其中包含以下文本:

Option Compare Database

Private Sub Text969_Click()

End Sub

Private Sub Combo367_Click()

End Sub

我一直在查看不同的页面,但我似乎无法使代码正常工作。对于我要问的特定问题,表格的名称是“慢性吸烟者”,第一个问题的字段名为“您是吸烟者吗”。第二个问题被命名为“如果是,多久一次。”这是我一直在尝试的代码,但它不起作用,但我似乎无法弄清楚其他任何事情:

Option Compare Database

Private Sub Text969_Click()

End Sub


Private Sub Combo367_Click()

If Chronic Smokers.Combo367='Yes' then 
Chronic Smokers.If yes, how often.Visible = True
Else
Chronic Smokers.If yes, how often.Visible = False
End if

End Sub

我认为我的部分问题是我不知道此代码的命名约定或语法的工作方式。我感觉问题的一部分是名称中有没有下划线的空格如果有人能帮我解决这个问题,我将不胜感激!

VBA 代码可以像 Me.[how often].Visible = Me.Combo367 = "Yes" 一样简单。不需要 If Then Else。代码将需要在组合框 AfterUpdate 中以及形成当前事件,而不是 Click 事件。代码将应用于所有控件实例,而不仅仅是当前记录。

注意:使用 Me 限定符是 shorthand 因为 form/report 目标代码在后面。

如果您更喜欢使用 If Then Else,正确的语法是:

With Me
If .Combo367 = "Yes" Then 
    .[how often].Visible = True
Else
    .[how often].Visible = False
End if
End With

建议您探索条件格式。它允许在没有 VBA 的情况下为每个记录动态 enable/disable 文本框和组合框。控件仍然可见,但 'greyed out'.

是的,强烈建议不要在命名约定中使用空格或 punctuation/special 字符(下划线除外)或保留字作为名称。如果这样做,请将其括在 [ ] 中,如上所示。更好的命名方式是 ChronicSmokersHowOften。并为对象提供比 Access 分配的默认名称更有意义的名称。