问题描述
我是新来的用户,因此这可能是一件容易的事,或者我只是尝试错误地解决它。我有一个包含多个列的报告,样品编号,样品时间,样品类型,干物质,水分。我正在尝试创建一个具有输入框的按钮,供用户选择要对报告进行排序的列。到目前为止,我想到了创建已按每个列排序的各种报告,并按对它们进行排序的列来命名报告,然后尝试使open report操作具有一个参数,该参数用于打开链接到在输入中输入的列的报告框。甚至可能吗?或者有解决方法。
PS。我避免创建各种按钮,因为它会填满整个屏幕。
解决方法
好的,这很通用,需要进行一些调整,但它显示了执行此操作的核心。
首先,您需要一个模块(而不是表单/报告代码)。这是为全局变量分配值的地方:
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
如果表单上的输入框没有与表中字段名称完全匹配的条目,则会弹出一个参数。