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

Vba 直接从导航表单运行报告-参考问题,vba,forms,ms-access,Vba,Forms,Ms Access,我在MS Access(365)中有一个表单,它接受各种选择标准,并使用DoCmd.OpenReport命令中内置的条件运行报告。报告通过点击VBA代码的按钮运行,因为必须根据选择的条件(如果有的话)构建wherecondition。当我直接打开选择标准表单时,一切都正常。我希望通过导航表单打开选择条件表单,因为我希望在同一导航表单中运行其他类似的报告,其中包含选择条件 如上所述,当我直接打开选择标准表单并运行报告时,一切都正常,但当我通过导航表单尝试时,一切都不正常。没关系,我在上找到了一个解

我在MS Access(365)中有一个表单,它接受各种选择标准,并使用
DoCmd.OpenReport
命令中内置的条件运行报告。报告通过点击VBA代码的按钮运行,因为必须根据选择的条件(如果有的话)构建wherecondition。当我直接打开选择标准表单时,一切都正常。我希望通过导航表单打开选择条件表单,因为我希望在同一导航表单中运行其他类似的报告,其中包含选择条件

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

代码示例和下面的相关注释。在运行选择标准表并直接报告时,生产线评论为AAA正常工作,MsgBox ABB和DDD以及所有显示之外的产品;在通过导航表单运行它们时,行BBB工作正常,MsgBox ABB和DDD以及其他所有显示之外的内容(好吧,它们会的,除非我还没有将[NavigationSubform]选项编码到所有其他Where Condition building stuff中)。当我切换行AAA和BBB(即,注释掉另一行)MsgBox AAA show 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"

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

strWhereCondition=strWhereCondition&“[common name]=”&Chr(34)&Me![cboCommonName]和Chr(34)
但是,仅当组合框包含空字符串以外的内容时,才需要修改字符串。这就是你挣扎的地方。当窗体作为顶级窗体直接打开时,可以通过一种方式引用组合框,当它包含在导航窗体中时,可以通过另一种方式引用组合框

表单![frmSelectSpeciesSiteDates]![CBOCommoname]
形式![FRMNAV报告]![导航子窗体][窗体]![CBOCommoname]
我建议您放弃这两个选项,并在修改字符串(
Me!cboCommonName
)时引用组合框

如果不是我!cboCommonName=”“然后
strWhereCondition=strWhereCondition&“[common name]=”&Chr(34)&Me!cboCommonName和Chr(34)
如果结束

表单是否未加载?使用
CurrentProject.AllForms(“frmSelectSpeciesSiteDates”).IsLoaded
安装的MsgBoxes使用Debug:Print、Watches和Breakpointa查看代码的作用