It may be a printer driver issue since 282364 states setting the margin to 0 results in Windows setting the margin to the lowest value the printer supports...
You can also set it at run time in VBA code. This can be useful when different printers are used and their non-printable margin widths are different.
Following is a way to set margins and orientation at run time.
Example code behind a Print Preview command button:
Private Sub RunPreviewReport_Click()
DoCmd.SetWarnings False
Call SetMargins("rptName", 0.5, 0.5, 0.5, 0.5)
'--ALL MARGINS 1/2 INCH
Call SetOrientation("rptName", True)
'--TRUE = PORTRAIT, FALSE = LANDSCAPE
DoCmd.Close acReport, "rptName", acSaveYes
DoCmd.SetWarnings True
DoCmd.OpenReport "rptName", acViewPreview
End Sub
VBA module:
Option Compare Database
Option Explicit
'--FOLLOWING USED TO SET PRINT ORIENTATION AND MARGINS AT RUN TIME, ENSURING CONSISTENCY
Type str_PRTMIP
strRGB As String * 28
End Type
Type type_PRTMIP
intLeftMargin As Long
intTopMargin As Long
intRightMargin As Long
intBotMargin As Long
intDataOnly As Long
intWidth As Long
intHeight As Long
intDefaultSize As Long
intColumns As Long
intColumnSpacing As Long
intRowSpacing As Long
intItemLayout As Long
intFastPrint As Long
intDatasheet As Long
End Type
Type str_DEVMODE
RGB As String * 94
End Type
Type type_DEVMODE
strDeviceName As String * 16
intSpecVersion As Integer
intDriverVersion As Integer
intSize As Integer
intDriverExtra As Integer
lngFields As Long
intOrientation As Integer
intPaperSize As Integer
intPaperLength As Integer
intPaperWidth As Integer
intScale As Integer
intCopies As Integer
intDefaultSource As Integer
intPrintQuality As Integer
intColor As Integer
intDuplex As Integer
intResolution As Integer
intTTOption As Integer
intCollate As Integer
strFormName As String * 16
lngPad As Long
lngBits As Long
lngPW As Long
lngPH As Long
lngDFI As Long
lngDFr As Long
End Type
Public Sub SetMargins(strName As String, sngLeft As Single, sngRight As Single, sngTop As Single, sngBottom As Single)
'-------------------------------
' strName = Report name
' sngLeft = Left Margin (in inches)
' sngRight = Right Margin
' sngTop = Top Margin
' sngBottom = Bottom Margin
'-------------------------------
Dim PrtMipString As str_PRTMIP
Dim PM As type_PRTMIP
Dim rpt As Report
DoCmd.OpenReport strName, acDesign
Set rpt = Reports(strName)
PrtMipString.strRGB = rpt.PrtMip
LSet PM = PrtMipString
PM.intLeftMargin = sngLeft * 1440
PM.intTopMargin = sngTop * 1440
PM.intRightMargin = sngRight * 1440
PM.intBotMargin = sngBottom * 1440
LSet PrtMipString = PM
rpt.PrtMip = PrtMipString.strRGB
End Sub
Public Sub SetOrientation(strName As String, boolPortrait As Boolean)
'-----------------------------
' strName = Report Name
' boolPortrait = Boolean...true = portrait, false = landscape
'-----------------------------
Const DM_PORTRAIT = 1
Const DM_LANDSCAPE = 2
Dim DevString As str_DEVMODE
Dim DM As type_DEVMODE
Dim strDevModeExtra As String
Dim rpt As Report
DoCmd.OpenReport strName, acDesign
Set rpt = Reports(strName)
If Not IsNull(rpt.PrtDevMode) Then
strDevModeExtra = rpt.PrtDevMode
DevString.RGB = strDevModeExtra
LSet DM = DevString
If boolPortrait Then
DM.intOrientation = DM_PORTRAIT
Else
DM.intOrientation = DM_LANDSCAPE
End If
LSet DevString = DM
Mid(strDevModeExtra, 1, 94) = DevString.RGB
rpt.PrtDevMode = strDevModeExtra
End If
End Sub
HTH,
Bob
Your mileage may vary, but following the guidelines in faq181-2886 will help you reach your goal.