访问调查过滤子问题基于对先前父问题的复选框答案

时间:2016-05-07 17:31:28

标签: vba ms-access checkbox access-vba survey

在以连续形式检查记录框时,我需要立即过滤连续表单的问题。我在Access 2013中有一个调查问卷,其中包含父母问题和子问题以及复选框,以回答特定问题的“是”。每个问题都是连续形式的单一记录。除非检查父问题,否则表单将过滤掉子查询。这是通过使用Dlookup函数来查找是否检查特定问题ID的复选框,然后重新过滤表单以显示原始问题以及子问题。

表单会过滤正确的信息,但在选中复选框后,我无法立即过滤。它在On Load事件中正确过滤。我也将过滤器应用于On点击复选框。我认为使用On Click时出现问题,因为Access无法识别查询的复选框值,直到我单击表单上的另一个控件,因此在检查框时它不会立即过滤但是当我点击下一个复选框时它会这样做。这让最终用户感到困惑,因为问题会出现在他们已经回答的问题之上。我已经尝试将过滤器VBA代码或重新查询功能复制到On Click,On Mouse Up,On Mouse Down,On Current和After Update事件中,但它们都不起作用。唯一可行的选项是On Paint事件,但随后表格不断闪烁,因为它不断地过滤它。

有人知道如何在选中复选框后立即过滤它吗?

这是我的过滤器代码:

    Dim strA As String
    Dim strB As String
    Dim strC As String
    Dim strD As String

    strA = "[QuestionNo] Like 'EM?'"
    strB = "[QuestionNo] Like 'EM*' AND [chkAnswer]=True"

    If DLookup("chkAnswer", "qryQuestions", "[QuestionNo] = 'EM1'") = True Then
    strC = "[QuestionNo] Like 'EM1?'"
    Else
    strC = "[QuestionNo] Like 'EM?'"
    End If

    If DLookup("chkAnswer", "qryQuestions", "[QuestionNo] = 'EM1a'") = True Then
    strD = "[QuestionNo] Like 'EM1a*'"
    Else
    strD = "[QuestionNo] Like 'EM?'"
    End If

    Me.Filter = strA & " OR " & strB & " OR " & strC & " OR " & strD
    Me.FilterOn = True
    Me.Requery

提前致谢!

0 个答案:

没有答案