Link to home
Start Free TrialLog in
Avatar of benpope
benpope

asked on

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

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

Avatar of Jeffrey Coachman
Jeffrey Coachman
Flag of United States of America image

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
ASKER CERTIFIED SOLUTION
Avatar of benpope
benpope

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Can you post a sample of this database that displays this issue?
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
Avatar of benpope
benpope

ASKER

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