ACC: How to Repeat Subreport Header at Top of Page

Last reviewed: October 24, 1997
Article ID: Q120907
The information in this article applies to:
  • Microsoft Access versions 1.0, 1.1, 2.0, 7.0, 97

SUMMARY

Moderate: Requires basic macro, coding, and interoperability skills.

This article describes how to repeat a subreport's header when the subreport spans multiple pages.

NOTE: This method works best for one subreport. Attempting to repeat the subreport header for multiple subreports requires a set of controls in the page header and a flag for each subreport. Then the code must check each flag and hide or show the appropriate sets of controls. This code is not easy to maintain.

NOTE: This article explains a technique demonstrated in the sample files, RptSampl.exe (for Microsoft Access for Windows 95 version 7.0) and RptSmp97.exe (for Microsoft Access 97). For information about how to obtain these sample files, please see the following articles in the Microsoft Knowledge Base:

   ARTICLE-ID: Q145777
   TITLE     : ACC95: Microsoft Access Sample Reports Available on MSL

   ARTICLE-ID: Q175072
   TITLE     : ACC97: Microsoft Access 97 Sample Reports Available on MSL

MORE INFORMATION

The method demonstrated in the following example uses a flag in the page header to indicate whether the subreport spans multiple pages. When the subreport's report header is printed the flag is set to 1. When the subreport's report footer is printed, the flag is set to 0. When the page header is printed, if the flag is set to 1 then the subreport spans multiple pages and the subreport's header should be repeated.

The following example demonstrates how to cause a subreport's header to be repeated if the subreport spans multiple pages:

  1. Open the sample database Northwind.mdb (or NWIND.MDB in versions 1.x and 2.0).

  2. Create the following macro, and then save it as RepeatSubHeader:

           Macro Name   Condition   Action
           ------------------------------------
           MainRH                   SetValue
           MainPH       [Flag]=0    CancelEvent
           SubRH                    SetValue
           SubRF                    SetValue
    
           MainRH Actions
           ------------------------------------------------
           SetValue
              Item: Reports![Categories Main Report]![Flag]
              Expression: 0
    
           SubRH Actions
           ------------------------------------------------
           SetValue
              Item: Reports![Categories Main Report]![Flag]
              Expression: 1
    
           SubRF Actions
           ------------------------------------------------
           SetValue
              Item: Reports![Categories Main Report]![Flag]
              Expression: 0
    
    

  3. Create a new report called Products Sub Report based on the Products table.

  4. Place the following three text box controls in the new report's detail section:

    Text Box:

              ControlName: ProductID
              ControlSource: ProductID
           Text Box:
              ControlName: CategoryID
              ControlSource: CategoryID
           Text Box:
              ControlName: ProductName
              ControlSource: ProductName
    
           NOTE: In versions 1.x and 2.0, there is a space in Product ID,
           in Category ID, and in Product Name.
    
    

  5. On the View menu, click Report Header/Footer.

  6. Place the following three labels in the report's report header section:

    Label:

              ControlName: Text1
              Caption: ProductID
           Label:
              ControlName: Text2
              Caption: CategoryID
           Label:
              ControlName: Text3
              Caption: ProductName
    
    

  7. Set the report header section's OnPrint property to the following macro:

    RepeatSubHeader.SubRH

  8. Set the report footer section's OnFormat property to the following macro:

    RepeatSubHeader.SubRF

  9. Create a new report called Categories Main Report based on the Categories table.

  10. Copy the controls from the Product Sub Report report's report header section and paste them into the page header section of the Categories Main Report report.

  11. Place the following text box in the Categories Main Report report's page header section:

    Text Box:

              ControlName: Flag
              Visible: No
    
    

  12. Place the following three text boxes in the Categories Main Report report's detail section:

    Text Box:

              ControlName: CategoryID
              ControlSource: CategoryID
           Text Box:
              ControlName: CategoryName
              ControlSource: CategoryName
           Text Box:
              ControlName: Description
              ControlSource: Description
    
    

  13. Embed the Products Sub Report report in the Categories Main Report report by dragging the Products Sub Report report from the Database window to the detail section of the Categories Main Report report.

  14. On the View menu, click Report Header/Footer to add a report header and footer to the main report. If you do not want a main report header or footer, set the header or footer section's height to 0.

  15. Set the OnFormat property of the report header section of the Categories Main Report report to the following macro:

    RepeatSubHeader.MainRH

  16. Set the OnPrint property of the page header section of the Categories Main Report report to the following macro:

    RepeatSubHeader.MainPH.

  17. Preview or print the report. Note that the subreport's header information is repeated when the subreport spans multiple pages.

Displaying Main Report Information on Every Page

The example above assumes that you do not want anything except the subreport header to be printed in the main report's page header. If you do want to print other information, you will need to hide and unhide each subreport header control in the page header. Change the MainPH macro in step 2 above to:

   Macro Name   Condition   Action
   -------------------------------------------------
   MainPH       [Flag]=0    SetValue
                               Item: [Text1].visible
                               Expression: False
                ...         SetValue
                               Item: [Text2].visible
                               Expression: False
                ...         SetValue
                               Item: [Text3].visible
                               Expression: False
                [Flag]=1    SetValue
                               Item: [Text1].visible
                               Expression: True
                ...         SetValue
                               Item: [Text2].visible
                               Expression: True
                ...         SetValue
                               Item: [Text3].visible
                               Expression: True

REFERENCES

For more information about events during printing, type "Print Events" in the Office Assistant, click Search, and then click to view "Print Event."

For more information about report OnFormat and OnPrint properties, search

on "OnFormat," and "OnPrint," using the Microsoft Access 97 Help Index

Keywords          : RptSub kbusage
Version           : 1.0 1.1 2.0 7.0 97
Platform          : WINDOWS
Hardware          : x86
Issue type        : kbhowto


================================================================================


THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Last reviewed: October 24, 1997
© 1998 Microsoft Corporation. All rights reserved. Terms of Use.