直接从导航表单运行报告-参考问题

时间:2018-08-30 23:22:17

标签: vba forms ms-access

我在MS Access(365)中有一个表单,该表单接受各种选择条件,并使用DoCmd.OpenReport命令的where条件中内置的那些条件运行报表。通过带有On Click VBA代码的按钮运行报告,因为必须根据选择的条件(如果有的话)构建where条件。当我直接打开选择标准表单时,一切正常。我想通过导航表单打开选择条件表单,因为还会有其他类似的带有选择条件的报告,我想从同一导航表单中运行。

如上所述,当我直接打开选择标准表单并运行报表时,一切都正常,但是当我通过导航表单尝试报表时,它不起作用。没关系,我在MS Dev Center site上找到了一个解决方案,当我从导航表单中运行选择标准表单(然后是报表)时,该解决方案就可以使用。一切都很好。但是,当我直接打开选择条件表单并运行报告时,(当然)按钮“单击”代码中的引用不起作用。我希望能够运行选择标准表单,然后从两个位置运行报告-直接从MS Access和通过导航表单运行。大概会有某种方法可以实现这一目标,但是(正如我上面所说,我是MS Access和VBA的新手)我可能会花很多时间抓紧阴影。希望有人能够告诉我最简单的方法吗?

下面带有相关注释的代码示例。在运行选择标准表格并直接报告时,该行注释为AAA正常,MsgBox ABB和DDD正常运行;在通过导航表单运行它们时,BBB行,MsgBox ABB和DDD以及所有未显示的行都可以正常运行(嗯,它们除了我尚未将[NavigationSubform]选项编码到其他所有whereconditon构建对象中)。当我切换AAA和BBB行(即,将另一行注释掉)时,MsgBox AAA显示为ok,则失败并显示:

  

找不到引用的表格“ frmSelectSpeciesSiteDates”

在到达MsgBox DDD之前。

MsgBox "ABB"

'If Not Forms![frmSelectSpeciesSiteDates]![cboCommonName] = "" Then 
         ' AAA Works when frmSelectSpeciesSiteDates is run directly

If Not Forms![frmNavSelectiveReports]![NavigationSubform].[Form]![cboCommonName] = "" Then
         ' BBB Works when frmSelectSpeciesSiteDates is called from a navigation form

   strWhereCondition = strWhereCondition & "[common name] = " & Chr(34) & Me![cboCommonName] & Chr(34)

End If

MsgBox "DDD"

1 个答案:

答案 0 :(得分:1)

您有一个名为frmSelectSpeciesSiteDates的表单,其中有一个名为cboCommonName的组合框。该表单还包含VBA代码,该代码使用组合框值来修改字符串变量...

strWhereCondition = strWhereCondition & "[common name] = " & Chr(34) & Me![cboCommonName] & Chr(34)

但是,仅当组合框包含空字符串以外的其他内容时,才想修改字符串。那就是你在努力的地方。当窗体直接作为顶层窗体打开时,您可以用一种方式引用组合框,而当它包含在导航窗体中时,则可以用另一种方式引用组合框...

Forms![frmSelectSpeciesSiteDates]![cboCommonName]
Forms![frmNavSelectiveReports]![NavigationSubform].[Form]![cboCommonName]

我建议您不要同时使用这两种方法,并使用与修改字符串({{1)}相同的方式引用组合框...

Me!cboCommonName