2017-04-17 103 views
0

因此,我正在自動化一個繁瑣的過程,即Samam叔叔讓我們在部署時做的事情。我有一個數據庫,我們將每天的日期放入表中。例如我有2017年4月10日至2017年11月7日上市。 每天都需要顯示日期和位置,我需要將六個結果垂直疊放,然後向右移動六次以再做六次。有多個列組的訪問報告

我有一個名爲2282report的報告,它是在適當位置有四個子位置[1-4]的主報告。本來我已經做了TOP 6,然後下一個會做TOP 6,但是ID> 6,但是我隨後將ID作爲日期,因爲無論如何都不能複製日期。我不確定使它們鏈接的正確方法,以便下一個子報表繼續顯示。

報告看起來像這樣跑時。我通常也會有超過90天的時間列表,所以我需要爲主要報告創建第二個頁面。

Print Preview

我在想什麼我所要做的就是創建整個定位塊新的子報表,但我不知道如何使report_details移動到一個新列,一旦它顯示6結果。

我剛纔想到的另一個選擇是讓子報表空白,然後使主報表通過vba設置每個控件的控件來源。我覺得這個人可能會工作,因爲它可以檢查是否有更多的日子,然後有行,以便它可以創建一個新的頁面繼續。但是,我需要弄清楚如何讓它繼續到下一頁。也會有一個底部,只有16天,而頂部的24個。

Design View

+0

爲什麼您的示例顯示20170408 - 20170413兩次?只是在建立這個例子時忽略一下?爲什麼只有6條線?這不會在工作表上留下很多未使用的空白空間嗎?你能提供數據庫進行分析和測試嗎?我推薦Box.com fileshare網站和文章鏈接。 – June7

+0

一個建議:您可以創建一個多列報表來至少處理四列。這仍然留下頁面之間繼續報告的任務,但至少會減少列的工作量。對於Access 2013,轉到報表設計,然後轉到頁面設置功能區,然後單擊各列的圖標以獲得各種選項。 –

+0

交叉發佈在http://www.accessforums.net/showthread.php?t=65580 – June7

回答

0

你也許會在各種報表事件處理程序使用VBA,但即使這可能工作,從我的經驗,只會導致頭痛試圖讓一切正確格式。相反,我建議在每一行上創建一個帶有頁碼的新報表。從排序的頁碼列表中獲取主報表,並通過頁碼字段綁定多列子報表。根據您的方案,使用簡單的VBA過程填充報表,以正確分頁行。

首先報告表(添加約束你找到需要):

CREATE TABLE SubReportTable (PageNum LONG, PageOrdinal LONG, _ 
    Ordinal LONG, LastPage BIT, [Date of Service] DATE, [Location] TEXT) 

子報表上:

  • 設置RecordSoucre屬性:SubReportTable(或者指定排序的查詢所需字段)
  • 將列數設置爲4以及其他列設置(填充,方向等)。
  • Set CanGrow property to No on Detail section and other controls as appropriate。
  • 調整欄和細節部分的大小以適合頁面上的所有欄。 (這可能需要在主窗體上的打印預覽和設計之間來回切換。)

在主報告中,設置以下屬性:

  • 記錄源屬性:SELECT SubReportTable.PageNum FROM SubReportTable WHERE (((SubReportTable.LastPage)=False)) GROUP BY SubReportTable.PageNum ORDER BY SubReportTable.PageNum
  • 詳細信息部分財產強制新頁After Section
  • 子報表對象的鏈接主字段鏈接子字段PageNum
  • 調整大小子報表對象來適合所有列。

在單獨的「最後一頁」報告上覆制主報告上的行爲。設置此報告根據報告表中的分頁數據(即LastPage = True)選擇合適的記錄子集。根據最後一頁有16條記錄的格式不同,它可能還需要爲16條記錄創建一個單獨的子報表,但是您可能會使用與主報表相同的子報表...這將是您的問題以確定。

  • 記錄源屬性:SELECT SubReportTable.PageNum FROM SubReportTable WHERE ((SubReportTable.LastPage = True)) GROUP BY SubReportTable.PageNum ORDER BY SubReportTable.PageNum

最後一些代碼來填充報表中。您可以直接從VBA即時窗口運行此過程,或將其放入某個按鈕的單擊事件處理程序中。分頁邏輯可以進行調整以在最後一頁獲得適量的記錄。

Public Sub PrepareSubReporTable() 
    On Error GoTo Catch_PrepareSubReporTable 

    Dim db As Database 
    Dim rs As Recordset2 
    Dim rows As Long, pgs24 As Long, rowsLast24 As Long, rows16 As Long 
    Dim i As Long, p As Long, pi As Long 

    Set db = CurrentDb 

    db.Execute "DELETE * FROM [SubReportTable]", dbFailOnError 

    db.Execute _ 
    "INSERT INTO SubReportTable (PageNum, PageOrdinal, Ordinal, LastPage, [Date of Service], [Location])" & _ 
    " SELECT Null AS PageNum, Null AS PageOrdinal, Null AS Ordinal, False as LastPage," & _ 
     " [Data].[Date of Service], [Data].[Location]" & _ 
    " FROM [Data]" & _ 
    " ORDER BY [Data].[Date of Service], [Data].[Location];", _ 
    dbFailOnError 

    rows = db.OpenRecordset("SELECT Count(*) FROM SubReportTable").Fields(0) 
    pgs24 = rows \ 24 
    rows16 = rows - 24 * pgs24 
    If rows16 > 16 Then 
    rowsLast24 = rows16 
    pgs24 = pgs24 + 1 
    rows16 = 0 
    Else 
    rowsLast24 = 24 
    End If 

    Set rs = db.OpenRecordset(_ 
     "SELECT * FROM SubReportTable" & _ 
     " ORDER BY [Date of Service], [Location];") 
    i = 0 
    Do Until rs.EOF 
    p = i \ 24 + 1 

    rs.Edit 
    rs![PageNum] = p 
    If p > pgs24 Then 
     rs![lastPage] = True 
     pi = (i - pgs24 * 24) Mod 16 + 1 
    Else 
     pi = i Mod 24 + 1 
    End If 
    rs![PageOrdinal] = pi 
    i = i + 1 
    rs![Ordinal] = i 
    rs.Update 

    rs.MoveNext 
    Loop 
    rs.Close 

    Exit Sub 
Catch_PrepareSubReporTable: 
    MsgBox Err.Number & ": " & Err.Description, _ 
     vbOKOnly Or vbExclamation, "Error in PrepareSubReporTable" 
End Sub 

現在產生主報告和最後頁的報告,可以手動或VBA代碼的某個地方。

注:我使用字段名稱PageNum而不是Page,因爲這在打印預覽過程中似乎會導致SubReport綁定出現問題......可能是因爲Page是報告的現有變量/函數的名稱。

+0

這個反應很棒。非常詳細和信息豐富。我意識到,當我發佈這個時,我可能沒有傳達16塊的部分將與24相同的頁面。我基本上正在重新創建一個表單[鏈接](http://matthewenderle.com/scratch/af2282。 pdf)只是爲了使它與部署的全體船員更加一致。我還上傳了我迄今爲止所閱讀的內容,因爲我從未收到過通知。你可以從我的網站服務器上下載這個例子[鏈接](http://matthewenderle.com/scratch/Database2.accdb)。 – MatthewEnderle

+0

只是想發佈一個更新,經過幾個小時的縈繞之後,我現在欠你一杯啤酒!謝啦! – MatthewEnderle

+0

我很高興它幫助!我毫不猶豫地批評Access,因爲我意識到「它就是這樣」,但我經常期望它起初像其他更好開發的工具一樣行事。在報告的情況下,我試圖讓格式正確來找到Access,以便以最愚蠢的方式處理事件和格式化。我包括了所有的細節,因爲當我已經知道所有的屬性和方法來做這樣的事情時,讓你慢慢地畫出全部內容是沒有意義的。 –