

We have seen in the
earlier Article how to change
Paper Size and
Page Orientation of MS-Access
Reports automatically through program for any Printer on the Network. We have copied
PrtDevMode Property Values into Memory; modified them to match the
Paper Size and
Page Orientation of the Report and updated them back into the
Report Page Settings before printing it on the default Printer installed on the
User's Machine.
We are going to perform a similar exercise to change the
Margin Settings of MS-Access Report through program. This time we have to work with
PrtMip Property of the
Report to change the Margin Values.
The procedure is almost same as of the previous example. The steps taken in the Program is as follows:
- Open the Report in Design View.
- Copy the PrtMip Property Values of the Report into a 28 Bytes long String Variable and move it into a redefined structured data area for modification.
- Change the required Margin Values in Memory.
- Update them back into the Report's PrtMip Property.
- Save the Report with the changes and open it in Print Preview.
So let us start.
- Open one of your Databases with Reports in it.
- Display the Visual Basic Editing Window (Alt+Fll).
- Insert (Insert - - > Module) a new Standard Module (Global Module).
- Copy and paste the following Code into the new Module and save it.
Private Type str_PRTMIP
strRGB As String * 28
End Type
Private Type type_PRTMIP
xLeftMargin As Long
yTopMargin As Long
xRightMargin As Long
yBotMargin As Long
fDataOnly As Long
xWidth As Long
yHeight As Long
fDefaultSize As Long
cxColumns As Long
yColumnSpacing As Long
xRowSpacing As Long
rItemLayout As Long
fFastPrint As Long
fDatasheet As Long
End Type
Public Sub SetMargins(ByVal strName As String)
Dim PrtMipString As str_PRTMIP
Dim PM As type_PRTMIP
Dim rpt As Report
Const TWIPS As Long = 1440
' Open the report.
DoCmd.OpenReport strName, acDesign
Set rpt = Reports(strName)
PrtMipString.strRGB = rpt.PrtMip
LSet PM = PrtMipString
' Set margins.
PM.xLeftMargin = 0.75 * TWIPS
PM.yTopMargin = 0.5 * TWIPS
PM.xRightMargin = 0.5 * TWIPS
PM.yBotMargin = 0.5 * TWIPS
' Update property.
LSet PrtMipString = PM
rpt.PrtMip = PrtMipString.strRGB
DoCmd.Close acReport, strName, acSaveYes
DoCmd.OpenReport strName, acViewPreview
Set rpt = Nothing
End Sub
- Open one of your existing Reports in Design View.
- Select File - ->Page Setup- - > Margins.
- Change all four sides (Left, Right, Top and Bottom) of the Margin settings to 1 Inch.
- Save and Close the Report.
- Open the Main Switchboard Form of your Application or create a new Form.
- Create a new Command Button on the Form.
- While the Command Button is in selected state, display the Property Sheet (View - ->Properties).
- Change the Name Property Value to cmdPreview and change the Caption Property Value to Print Preview.
- Display the Code Module of the Form (View - -> Code).
- Copy and paste the following lines into the Code Module of the Form.
Private Sub cmdPreview_Click()
SetMargins "MyReport"
End Sub
- Replace the name MyReport with your own Report Name.
- Save and close the Form.
- Open the Form in normal view and Click on the Command Button to run the Program and change all four margins of the Report to new values and to open the Report in Print Preview.
Close the Report and open it again in Design View and check whether the margin settings have been really changed through program or not.
Note:If any value is less than the allowable range, based on the printer driver settings, the printer may fix it to the allowable range automatically. In that case you may find some value is greater than what you have specified. You can do a sample run of the Program by typing
SetMargins "YourReportName" in the Debug Window directly, without the use of
Form or
Command Button.
You can run this Program from within the earlier
PaperAndOrient() Program to change the
Margins also along with the
Paper Size and
Page Orientation. All the three set of values can be changed by calling the
PaperAndOrient() Program alone.
The modified
PaperAndOrient() Program is given below:
Public Sub PaperAndOrient(ByVal strName As String)
Const DM_PORTRAIT = 1
Const DM_LANDSCAPE = 2
Const DM_PAPERSIZE = 9
Dim DevString As str_DEVMODE
Dim DM As type_DEVMODE
Dim strDevModeExtra As String
Dim rpt As Report
' Opens report in Design view.
DoCmd.OpenReport strName, acDesign
Set rpt = Reports(strName)
If Not IsNull(rpt.PrtDevMode) Then
strDevModeExtra = rpt.PrtDevMode
DevString.RGB = strDevModeExtra
LSet DM = DevString
DM.lngFields = DM.lngFields Or DM.intOrientation
' Initialize fields.
DM.intPaperSize = DM_PAPERSIZE
If DM.intOrientation = DM_PORTRAIT Then
DM.intOrientation = DM_LANDSCAPE
End If
' Update property.
LSet DevString = DM
Mid(strDevModeExtra, 1, 94) = DevString.RGB
rpt.PrtDevMode = strDevModeExtra
End If
SetMargins strName
DoCmd.Close acReport, strName, acSaveYes
DoCmd.OpenReport strName, acViewPreview
Set rpt = Nothing
End Sub
Public Sub SetMargins(ByVal strName As String)
Dim PrtMipString As str_PRTMIP
Dim PM As type_PRTMIP
Dim rprt As Report
Const TWIPS As Long = 1440
Set rprt = Reports(strName)
PrtMipString.strRGB = rprt.PrtMip
LSet PM = PrtMipString
' Set margins.
PM.xLeftMargin = 0.75 * TWIPS
PM.yTopMargin = 0.5 * TWIPS
PM.xRightMargin = 0.5 * TWIPS
PM.yBotMargin = 0.5 * TWIPS
' Update property.
LSet PrtMipString = PM
rprt.PrtMip = PrtMipString.strRGB
Set rprt = Nothing
End Sub
The
Dimensions of the Reports, Forms and other Objects are measured internally in
Twips rather than in
Inches or
Millimeters. We are allowed to change the measurements on the Property Sheets of Report, Form or other Objects in standard measurements manually, like Inches or Centimeters or in any other regional values. They are automatically converted into Twips internally. But, in programs we have to do that work before changing the values of the Property of objects.
1 Inch = 1440 Twips
1 Inch = 72 Points
1 Point = 20 Twips
OR
1 Twip = 1/20 Point
We have used Constant values in the Program for
Page Size, Orientation and
Margins for simplicity. You can modify the Code to pass these values as parameters along with the Report Name, when the Program is called for each Report. This will give more flexibility and the Program can be called for Reports with different Page Settings.
Next we will see how to change the values on the
Columns Tab of the
Page Setup Dialog Box of
File Menu.
Control Tip Text and Time DelayExternal Files List in HyperlinksCombo Box Column ValuesDrill-Down Inquiry Screen-2Drill-Down Inquiry Screen
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.