Solved

How the Access report preview be refreshed after programmatically changing the page setup options?

Posted on 2009-04-14
5
817 Views
Last Modified: 2013-11-28
Hello Experts,

I have a sub routine that I can call on a report's open event to change the default report paper size and margins based on a user's preference stored in a table.  This works fine and changes the report's defaults.  However, it does not update the report's preview after modifying the report's page settings.  The result is that the desired page setup changes are made and correct, but may look wrong to the user because the report may have opened with different initial page settings.  After the report opens, I can confirm that changes have taken place by opening the page setup dialog box and checking that the margins and page selection have been modified.  Once the page setup dialog is open, selecting OK refreshes the print preview and the report then looks correct.  What I need is a way to programmatically simulate clicking the OK button after resetting the page setup options with VBA to get the report to appear correct in print preview.

Any suggestions or is there a better way to do this that will apply the desired page setup changes and then correctly show them in print preview?

Cheers,
Ben
Public Sub SetMarginsToDefault()

'Uses a global string "strOpenreport" set to the name of the currently open report

'Allows use of this sub from any open report

'Set margin defaults for Letter or A4 size paper depending on region

' First, determine what size is the regional default

' looks up and assigns regional default based on user's looked up region, allows for additional defualt types

Dim setRegionalMargin

'setRegionalMargin = "letter" 'comment in/out for testing

'setRegionalMargin = "A4" 'comment in/out for testing

setRegionalMargin = DLookup("PaperSize", "tblRegion", "Region = " & "'" & varRegion & "'")

    'specifies the regional paper size and margin format in twips

     Select Case setRegionalMargin

            Case "A4"

                With Reports(strOpenreport).Printer

                    .PaperSize = acPRPSA4

                    .LeftMargin = 0.65 * 1440

                    .TopMargin = 0.5 * 1440

                    .RightMargin = 0.25 * 1440

                    .BottomMargin = 0.125 * 1440

                End With

             Case "Letter"

                With Reports(strOpenreport).Printer

                    .PaperSize = acPRPSLetter

                    .LeftMargin = 0.3 * 1440

                    .TopMargin = 0.625 * 1440

                    .RightMargin = 0.25 * 1440

                    .BottomMargin = 0.25 * 1440

                End With

     End Select

    End Sub

Open in new window

0
Comment
Question by:benpope
  • 2
  • 2
5 Comments
 
LVL 74

Expert Comment

by:Jeffrey Coachman
Comment Utility
When are you running this code?

One option may be to simply close the report, then open it in Print Preview again.

    DoCmd.Close acReport, "YourReport", acSaveYes
    Docmd.OpenReport ""YourReport", acViewPreview

JeffCoachman
0
 

Accepted Solution

by:
benpope earned 0 total points
Comment Utility
Hi Jeff,
Thanks for the suggestion.  I'm running the code to reset the margins on the open event of the report.  I also added some code to first test if the page setup was already formatted correctly and if not, then run the code.  I thought that closing and re-opening the report might work and conducted some tests and variations on the code.  Simply closing and re-opening does not change the print preview appearance.  The only way I can get the print preview to appear correctly after changing the page setup options programmatically is to open the page setup dialog and click OK. Then, the preview screen refreshes and it looks good.  At this point I think my answer may be to put in a pop-up message box that instructs the user to open page setup dialog and click OK the first time the page options are changed.  This only needs to be done once and then the options stick unless the user manually changes it.

BTW.  This is a for an application that is used through several global regions.  It is able to determine which region it is operating in and whether the regions uses A4 or letter paper. The idea is to set the printing for reports based on the user's regional requirement.

Thanks, and please let me know if you have any idea other than a message box that might resolve this.
Ben
0
 
LVL 74

Expert Comment

by:Jeffrey Coachman
Comment Utility
Can you post a sample of this database that displays this issue?
0
 
LVL 6

Expert Comment

by:BALMUKUND KESHAV
Comment Utility
In your above code, you have not refreshed the report after setting the paper size, try to refresh the report after setting the paper size.

thanks,

Bm Keshav
0
 

Author Comment

by:benpope
Comment Utility
Hi BM Keshav,

Refreshing the report preview after re-setting the page setup optins does seem like the logical programming step.  However, there does not seem to be a VBA action for a report that I know of that can do this.  Refresh works on the data underlying the report and repaint only affects forms.  There did not seem to be a VBA command tool that would the cause the report preview to repaint after a page setup change.  I was hoping that someone on this forum might be able to tell me how to do this.

For Boaq2000,
It wouldn't be practical to post the actual database that generates these reoports.  It's rather large at about 60 meg and rather intricate.  It might be possible to split off a small sample segment that demstrates this problem, but I would have to develop that.

Cheers,
Ben
0

Featured Post

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

Introduction The Visual Basic for Applications (VBA) language is at the heart of every application that you write. It is your key to taking Access beyond the world of wizards into a world where anything is possible. This article introduces you to…
Overview: This article:       (a) explains one principle method to cross-reference invoice items in Quickbooks®       (b) explores the reasons one might need to cross-reference invoice items       (c) provides a sample process for creating a M…
Learn how to number pages in an Access report over each group. Activate two pass printing by referencing the pages property: Add code to the Page Footers OnFormat event to capture the pages as there occur for each group. Use the pages property to …
Polish reports in Access so they look terrific. Take yourself to another level. Equations, Back Color, Alternate Back Color. Write easy VBA Code. Tighten space to use less pages. Launch report from a menu, considering criteria only when it is filled…

743 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!

Get 1:1 Help Now