2016-07-07 97 views
0

我目前正在开发由前一名员工开发的Access数据库,并已根据需要引入该数据库以维护/调整系统。系统存储由员工完成的任务信息,并具有可创建的各种报表以查看度量标准。为了让这些报告更清楚地阅读这些报告,我想将“查看日期”添加到报告标题。传递给报告的表单信息

为了打开报告,管理员点击加载相应报告的“发件人”按钮(用于今天,昨天或特定的一天)。对于“今天”和“昨天”,我可以使用日期=日期()和=日期() - 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:使用文本框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条件。

+0

我试图帮助指导我的其中一篇文章,使用OpenArgs部分看起来有点令人困惑。 http://stackoverflow.com/questions/398804/how-do-i-pass-a-parameter-into-an-access-report-programatically – BadgerMotsu

+0

@HansUp问题更新。将控件源的文本框中的报表标题中的值用作= Date()。是的,目前有三个单独的报告。 – BadgerMotsu

+0

其他设计差异将在vba编码,而不是今天和今天的输入框使用下面的代码来满足WHERE条件。 今天=日期 年=年(今天) 月=月(今天) DT =日(今天) – BadgerMotsu

回答

0

我现在明白了 - 我认为你对所有查询都使用了相同的报告 - 这当然是可能的。

但是,如果您只想动态更改报表标题中的文本字段 - 您当然可以做到这一点。

在报表中,编辑使用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 

确保在运行代码之前关闭并保存报告设计

+0

立即对其进行处理,出现错误“2448:您无法为此对象分配值”,并突出显示了Text5.Value = strTextDate行。逐行运行strTextDate获取字符串,但不会将其放入Text5框中。可以肯定的是,Text5是我希望在报告中输入日期的文本框的名称? – BadgerMotsu

+0

它必须是你在报告中使用的控件 - 我的只是一个例子 – dbmitch

+0

已编辑 - 无法使用Report_Open - 控件无法访问 - 使用Report_Load – dbmitch