【问题标题】:Running a report directly and from a navigation form - reference issue直接从导航表单运行报告 - 参考问题
【发布时间】:2018-08-30 23:22:16
【问题描述】:

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

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

下面带有相关 cmets 的代码示例。在直接运行选择标准表格和报告时,注释为 AAA 工作正常的行,MsgBox ABB 和 DDD 以及超出所有显示的行;在通过导航表单运行它们时,行 BBB 工作正常,MsgBox ABB 和 DDD 以及其他所有显示(好吧,除了我还没有将 [NavigationSubform] 选项编码到所有其他 whereconditon 构建的东西之外,它们会显示)。当我切换 AAA 和 BBB 行(即,将另一行注释掉)MsgBox AAA 显示正常时,它会失败并显示:

找不到引用的表单“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"

【问题讨论】:

  • 表单未加载?检查 CurrentProject.AllForms("frmSelectSpeciesSiteDates").IsLoaded Instaed 的 MsgBoxes 使用 Debug:Print、Watches 和 Breakpointa 来查看代码的作用

标签: vba forms ms-access


【解决方案1】:

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

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

但是,您只想在组合框包含空字符串以外的内容时修改字符串。这就是你挣扎的地方。当表单直接作为顶级表单打开时,您引用组合框的一种方式,以及当它包含在导航表单中时的另一种方式......

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

我建议你放弃这两个,并参考与修改字符串相同的组合框 (Me!cboCommonName) ...

If Not Me!cboCommonName = "" Then
    strWhereCondition = strWhereCondition & "[common name] = " & Chr(34) & Me!cboCommonName & Chr(34)
End If

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多