【问题标题】:is it possible to pass values to an access report from both vba and from a form?是否可以从 vba 和表单将值传递给访问报告?
【发布时间】:2018-03-07 23:47:03
【问题描述】:

我有一组报告,而不是当前从“选择报告”表单运行的报告。用户选择他们想要查看的报告名称和开始和/或结束日期,所选报告的基础查询会查看表单上的控件以将报告过滤到所选日期。

我们现在希望每周一早上自动运行其中一些报告,以通过电子邮件发送出去。报告的开始日期和结束日期将为 Date() 和 Date()+14。我知道如何编写代码来运行报告并将其附加到电子邮件中,但我不知道如何以编程方式将日期传递给表单的底层查询,而不是查看表单控件。

我已经搜索了答案,但只能找到解释如何执行其中一项的答案,但如果可以使用同一份报告同时执行这两项操作,则找不到答案。 我尝试在报表的基础查询中使用参数,但是当我从表单打开报表时,我得到日期参数的提示框,即使在表单上选择了日期并传递给报表预期的。

我也尝试通过 openargs 传递日期,而不是直接查看表单控件,但是我不知道如何将这些 openarg 值传递给查询,只传递给报表上的控件。这意味着显示的开始日期和结束日期是正确的,但日期过滤不适用于报告。通过单步执行,报表在 OnLoad 代码运行之前加载数据,该代码将控件设置为 openargs 值,因此在过滤数据时它们为空。

非常感谢任何帮助,我对这里的最佳方法感到有些困惑。谢谢。

【问题讨论】:

  • 或许将查询的日期条件设置为Date()DateAdd("y", 14, Date())
  • @KostasK。那么您的意思是不要尝试将日期仅传递给现有来源,而是为整个记录来源提供修改后的标准?我没有想到那个选项,谢谢。但是,它是大量报告,因此为每个可能的报告提供修改后的记录源的编码意味着仅复制报告并拥有一组与表单一起使用和一组具有参数可能会更容易使用自动生成/电子邮件过程。我希望找到一种方法来解决这个问题,而无需复制报告。
  • 不,我的意思是报告的基础查询。不要将日期作为参数传递给查询,而是让查询找出它们。当然,如果您需要报告日期始终默认为今天和今天 +14。
  • 类似SELECT * FROM T WHERE [Field] BETWEEN Date() And DateAdd("y", 14, Date());
  • 感谢@KostasK。不幸的是,日期只有今天和今天 + 14,当我们在星期一早上运行它们以发送电子邮件时。当用户从当前选择表单运行报告时,他们可以选择任何开始或结束日期,或者将一个或两个日期留空。

标签: ms-access parameters vba


【解决方案1】:

我已经为此找到了一个可行的解决方案,它可能不是最优雅的,但它允许我在两种情况下使用单个报告,即在特定日期范围内自动打开,或者在用户指定的情况下根据用户请求打开日期。
我已经修改了报告,因此它们的默认记录源使用 Date() 和 Date()+14 作为报告日期范围。 当用户从“报表选择”表单打开报表时,“用户”通过 OpenArgs 传递。表单的 OnOpen 事件检查 OpenArgs 的值,如果设置为“用户”,则更改报表的记录源和显示报表日期范围的控件,以使用用户在选择表单上输入的日期。 @kostasK。感谢您的所有投入,您帮助我找到了这个解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-23
    • 2023-03-11
    • 1970-01-01
    相关资源
    最近更新 更多