2016-07-07 121 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