我在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"
答案 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