如何在查询中使用条件变量将查询限制为活动表单?

问题描述

我有一个名为“frmBond-MuniDetailSAE”的表格。它有一个名为“cboStep”的组合框。 cboSteps 的行源是一个嵌入式查询,它从名为“tblBond-Steps”的表中检索记录,它具有作为条件 - [表格]![frmBond-MuniDetailSAE]![SYM]。这将查询 tblBond-Steps 中的记录限制为仅那些具有与表单中该字段匹配的 SYM 字段的记录。这工作正常。但是我希望能够为其他类型的债券复制和重用表单,并且我不想在每个复制的表单中重写嵌入的查询。所以我想在查询条件中使用一个引用当前表单的变量。 按照 StackOverflow 在 How do I reference the current form in an expression in Microsoft Access? 中给出的答案,我编写了一个名为“FormName()”的公共函数。这是函数

Public Function FormName() As String
 Dim frmCurrentForm As Form
 Set frmCurrentForm = Screen.ActiveForm
 FormName = "[Form]![" & frmCurrentForm.Name & "]" & "![SYM]"

End Function

然后在组合框的嵌入式查询中,我输入了“FormName()”作为条件。这是该查询sql

SELECT [tblBond-Steps].SYM,[StepDate] & " @ " & [Cpn] AS Steps,Format([tblBond-Steps]. 
[StepCpn],"0.0000%") AS Cpn,[tblBond-Steps].StepDate
FROM [tblBond-Steps]
WHERE ((([tblBond-Steps].SYM)=FormName()))
ORDER BY [tblBond-Steps].StepDate;

但是,当我使用上述查询作为 cboSteps 的行源打开表单时,我收到 VBA 运行时错误“2475”:“您输入的表达式需要表单作为活动窗口。”

我不知道我做错了什么。有人可以帮我吗?

解决方法

您必须返回,而不是表达式:

Public Function FormName() As String

    Dim frmCurrentForm As Form

    Set frmCurrentForm = Screen.ActiveForm
    FormName = frmCurrentForm![SYM].Value

End Function