【问题标题】:Access button to open multiple reports depending on user input访问按钮可根据用户输入打开多个报告
【发布时间】:2020-09-07 14:40:59
【问题描述】:

我是新手,所以这可能是一项简单的任务,或者我只是试图错误地解决它。我有一份报告,其中包含各种列、样品 ID、样品时间、样品类型、干物质、水分。我正在尝试创建一个按钮,该按钮具有一个输入框,供用户选择对报告进行排序的列。到目前为止,我想创建已按每列排序的各种报告,按对它们进行排序的列命名报告,然后我试图让打开报告操作有一个参数,该参数打开链接到输入时输入的列的报告盒子。这是否可能,或者是否有解决方法。

PS。我避免创建各种按钮,因为它会填满屏幕。

【问题讨论】:

  • 报告有一个.orderby 属性,使用它来排序。您可以通过在模块中创建一个子例程设置一个全局变量,然后在report_load 事件中将该变量分配给标签.value 属性来获取一个参数以更改标题标签。
  • 我会试一试,让你知道它是否有效。感谢您的帮助。
  • 嗨 Warcupine,你有我可以参考的代码示例吗?我不知道如何编写创建全局变量,如果我引用查询或报告以及在哪里添加参数?

标签: vba ms-access


【解决方案1】:

好的,这很通用,需要进行一些调整,但它展示了如何做到这一点的核心。

首先你需要一个模块(所以不是表单/报告代码)。这是全局变量被赋值的地方:

Option Compare Database
Option Explicit

Global rptname As String
Global fldname As String

Sub setRptName(name As String)
    
    rptname = "Report Sorted by: " & name
    fldname = name
End Sub

您将在表单上命令按钮的Click() 事件中调用该代码,然后打开报表。这将获取一个组合框值并将该值传递给模块代码,从而创建两个全局变量。:

Private Sub cmd_report_Click()
    mdl_Globals.setRptName Me.cmb_fields.Value
    
    DoCmd.OpenReport "Report1", acViewPreview
End Sub

我不确定这是否适用于非预览视图,但您可能还是想要预览。

最后在后面的报告代码中,您需要 Load()open() 事件,您可以让它在其中一个或另一个中工作,但我知道这个工作。 所以要设置标题:

Private Sub Report_Load()
    Me.lbl_header.Caption = rptname
End Sub

然后进行排序:

Private Sub report_open(Cancel As Integer)
    Me.Report.OrderBy = "[" & fldname & "]"
    Me.Report.OrderByOn = True
End Sub

如果表单上的输入框没有与表中字段名称完全匹配的条目,您将收到一个参数弹出窗口。

【讨论】:

  • 很抱歉没有掌握这个概念,但我试图弄清楚我在哪里输入了报告名称,并且几乎调整了代码以适应我的数据库。我的报告名称是 rptdrymatter 我应该在代码中的哪里添加报告名称?
  • 打开报告或将其添加到报告中的标签?
  • 两者。就像从您的代码中一样,我应该在哪一步添加报告名称?
  • 或者我几乎可以改写我的问题,你能解释一下代码中发生了什么以及如何提示用户在提示框中添加一列以对报告进行排序
  • 因此您的表格中包含所有数据,您可以在表格中创建一个组合框,您可以选择的选项是表格中的字段。一旦选择了一个值,您按下一个按钮,该按钮然后调用位于模块中的代码。模块代码根据组合框中的选择将值分配给全局变量。在模块代码运行按钮然后打开报表后,报表会查看这些全局变量以更改标题标签标题和排序顺序。
猜你喜欢
  • 1970-01-01
  • 2021-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-18
  • 1970-01-01
  • 2012-09-12
  • 1970-01-01
相关资源
最近更新 更多