传递给报告的表单信息
Posted
技术标签:
【中文标题】传递给报告的表单信息【英文标题】:Form information passed to Report 【发布时间】:2016-07-07 18:09:32 【问题描述】:我目前正在开发一个由以前的员工开发的 Access 数据库,该数据库已被引入以根据需要维护/调整系统。系统存储员工完成的任务的信息,并且可以创建各种报告来查看指标。为了让阅读这些报告的人更清楚,我想在报告标题中添加“查看日期”。
为了打开报告,经理单击“发件人”按钮(今天、昨天或特定日期)以加载相应的报告。对于“今天”和“昨天”,我可以使用 =Date() 和 =Date()-1 输入日期。但是,我在为特定日期做类似的事情时遇到了麻烦。
到目前为止,我的解决方案是通过按下表单上的按钮,InputBox 从经理那里获取日、月和年,以在 WHERE 语句中生成当天的报告。我想在报告中使用这些值(dt、mo、yr),但不确定在报告中放入什么来从 vba 代码中提取这些值。对此的想法或处理它的不同方式将不胜感激!
当前的 vba 代码如下。根据我的阅读,有一些技术可以创建一个临时查询/表/表单来存储信息,然后将其拉回报告中。或者有一些方法可以将这些变量设为“公共”并从不同的位置拉出,但这种方法目前超出了我的想象。
Private Sub SpecificSummary_Click()
Dim stDocName As String
Dim yr As Integer
Dim mo As Integer
Dim dt As Integer
mo = InputBox("Enter Month:")
dt = InputBox("Enter Day:")
yr = InputBox("Enter Year:")
stDocName = "SpecificSummary"
DoCmd.OpenReport stDocName, acViewPreview, , "((Year([TimeStamp])) = " & yr & ") And ((Month([TimeStamp])) = " & mo & ") And ((Day([TimeStamp])) = " & dt & ")"
End Sub
RE: to HansUp 中的更多信息
对于今天和昨天的报告,在使用文本框的报告标题中,我使用 =Date() 表示今天,使用 =Date()-1 表示昨天。
更新:根据要求,这是今日报告的当前代码/方法。
Private Sub TodaySummary_Click()
Dim today As Date
Dim stDocName As String
Dim yr As Integer
Dim mo As Integer
Dim dt As Integer
today = Date
yr = Year(today)
mo = Month(today)
dt = Day(today)
stDocName = "DailySummary"
DoCmd.OpenReport stDocName, acViewPreview, , "((Year([TimeStamp])) = " & yr & ") And ((Month([TimeStamp])) = " & mo & ") And ((Day([TimeStamp])) = " & dt & ")"
End Sub
在报告(TodaySummary)中,我使用...
=Date()
打印日期
我觉得我做的比应该做的要困难得多,并且盲目地错过了一种使用日期的明显方法,而不是将其分解为年/月/日并以这种方式使用 WHERE 条件。
【问题讨论】:
我试图帮助指导我的帖子之一就是这个,使用 OpenArgs 部分似乎有点混乱。 ***.com/questions/398804/… @HansUp 在问题中更新。使用控件源为 =Date() 的文本框中的报表标题中的那些。是的,目前有三份单独的报告。 另一个设计差异在于 vba 编码,而不是 Inputbox 今天和昨天使用下面的代码来满足 WHERE 条件。今天 = 日期 yr = 年(今天) mo = 月(今天) dt = 日(今天) VBA 代码在表单的模块下,在将加载报告的按钮单击的子下。代码与问题中显示的相同,只是输入框部分在今天/昨天/特定日期之间更改,如果有意义的话。 这有帮助。我假设您只使用一份报告 - 这会容易得多。但是,当我看到你的问题时,现在这更有意义了。 【参考方案1】:我现在明白了 - 我假设您对所有查询都使用相同的报告 - 这当然是可能的。
但如果您只想动态更改报告标题中的文本字段 - 您当然可以这样做。
在您的报告中,EDIT USE REPORT_LOAD 事件 打开 Report_Load 事件 然后将事件编辑为如下所示:
Private Sub Report_Load()
Dim strTextDate As String
strTextDate = Nz(Me.Report.OpenArgs, "")
' Replace "Text5" with your control
Text5.Value = strTextDate
End Sub
将您的代码更改为:
Dim stDocName As String
Dim yr As Integer
Dim mo As Integer
Dim dt As Integer
Dim strTextDate As String
mo = InputBox("Enter Month:")
dt = InputBox("Enter Day:")
yr = InputBox("Enter Year:")
' Change this to match your date format
strTextDate = "" & yr & "-" & mo & "-" & dt
stDocName = "SpecificSummary"
' Add date to last OpenArgs parameter of OpenReport
DoCmd.OpenReport stDocName, acViewPreview, , , acWindowNormal, strTextDate
确保在运行代码之前关闭并保存您的报表设计
【讨论】:
现在正在处理它,遇到错误“2448:您不能为此对象分配值”,它突出显示 Text5.Value = strTextDate 行。逐行运行 strTextDate 获取字符串,但不允许将其放入 Text5 框中。可以肯定的是,Text5 是我希望在报告中输入日期的文本框的名称? 它必须是您在报告中使用的控件 - 我的只是一个示例 已编辑 - 无法使用 Report_Open - 控件尚不可访问 - 使用 Report_Load 是的,我明白了。在报表设计中,文本框被命名为 Text22,因此在代码中我使用的是 Text22 而不是 Text5。我是否还需要更改文本框的控制源?如果是这样,那会是 =[strTextDate] 或 =[Text22] 或 =[OpenArgs] 之类的吗? 知道了!不需要控制源中的任何内容,名称为 Text22,并使用此链接:***.com/questions/1041397/…:将 on load 调整为 on 格式,因为该软件是 2003 年的。感谢@dbmitch 的帮助!以上是关于传递给报告的表单信息的主要内容,如果未能解决你的问题,请参考以下文章