如何根据参数打开一种或另一种形式?

时间:2011-09-08 14:03:36

标签: ms-access ms-access-2007

有人可以帮助我。 这听起来很简单,但我不知道我是否可以做到这一点。 这个想法是:如果存在参数而不是打开该记录,否则打开一个新的输入数据。

这是我的尝试,但我甚至无法让它运行。

Private Sub Form_Load()
    If (Me.Type = Act _
        and Me.Title <> null _
        and section <> null) _
        or Me.Type in ('Proposed','Final') 
        and Me.Rule <> null
    Then 
        Docmd.OpenForm "F_Eval" (but open that specific f_Eval)

    Else
        Docmd.OpenForm "F_NewEval" (to enter new record)
    End If
End Sub

2 个答案:

答案 0 :(得分:2)

修改您的Null比较。作为一个示例,请从 If 条件中考虑此部分:

Me.Title <> null

没有什么能够“不等于”Null,就像没有任何东西可以“等于”Null一样。甚至没有其他Null可以等于Null(或不等于Null)。

因此,无论Me.Title是Null还是包含非Null值,该表达式都将返回Null。您想要一个返回True或False的表达式。使用IsNull()函数。

If Not IsNull(Me.Title) Then
   'do what you want for a non-Null Title here '
End If

对于“打开特定的f_Eval”要求,请将WhereCondition参数与OpenForm Method一起使用。这是从该链接页面复制的示例。它将打开一个名为Employees的表单,并将表单的记录源限制为LastName为“King”的行。

DoCmd.OpenForm "Employees", , ,"LastName = 'King'"

所以OpenForm WhereCondition就像没有单词WHERE的查询中的WHERE子句。

答案 1 :(得分:0)

你的第一句话对我来说是错误的。我怀疑你的意思是“行动”,一方面。尝试

If (Me.Type = "Act" _
    And Me.Title <> Null _
    And Me.Section <> Null) _
    Or (Instr("Proposed,Final",Me.Type) >0 
    And Me.Rule <> Null )

我不相信你从代码中剪切并粘贴了你的例子,最好这样做。