将下列代码粘贴到一个新模块中,并调用CheckCustomPage过程检查指定报表的自定义纸张。
Typestr_DEVMODE
RGBAsString*94
EndType
Typetype_DEVMODE
strDeviceNameAsString*16
intSpecVersionAsInteger
intDriverVersionAsInteger
intSizeAsInteger
intDriverExtraAsInteger
lngFieldsAsLong
intOrientationAsInteger
intPaperSizeAsInteger
intPaperLengthAsInteger
intPaperWidthAsInteger
intScaleAsInteger
intCopiesAsInteger
intDefaultSourceAsInteger
intPrintQualityAsInteger
intColorAsInteger
intDuplexAsInteger
intResolutionAsInteger
intTTOptionAsInteger
intCollateAsInteger
strFormNameAsString*16
lngPadAsLong
lngBitsAsLong
lngPWAsLong
lngPHAsLong
lngDFIAsLong
lngDFrAsLong
EndType
PublicSubCheckCustomPage(ByValrptNameAsString)
'用途:检查报表的自定义纸张
'调用方法:CallCheckCustomPage(rptName)
'参数说明:rptName:为检查的报表名称
'调用举例:设有名为"MyReport"的报表,
'CallCheckCustomPage("MyReport")
'当该报表使用的是自定义纸张时,则显示自定义纸张的大小,
'并询问是否更改纸张的大小并进行设置;
'当该报表使用的是标准纸张时,则询问是否使用自定义纸张,
'如果选择“是”,则要求输入纸张的大小并进行设置。
DimDevStringAsstr_DEVMODE
DimDMAstype_DEVMODE
DimstrDevModeExtraAsString
DimrptAsReport
DimintResponseAsInteger
'在设计视图下打开报表
DoCmd.OpenReportrptName,acDesign
Setrpt=Reports(rptName)
IfNotIsNull(rpt.PrtDevMode)Then
strDevModeExtra=rpt.PrtDevMode
'获取当前的DEVMODE结构
DevString.RGB=strDevModeExtra
LSetDM=DevString
IfDM.intPaperSize=256Then
'显示用户自定义纸张的尺寸
intResponse=MsgBox("当前的自定义纸张为(mm):"&_
DM.intPaperWidth/10&"(宽)X"&_
DM.intPaperLength/10&"(长)。你想改变吗?",_
vbYesNo+vbQuestion)
Else
'非自定义纸张
intResponse=MsgBox("报表没有使用自定义纸张。"&_
"你想使用自定义纸张吗?",vbYesNo+vbQuestion)
EndIf
IfintResponse=6Then
'用户要改变纸张设置,初始化DM的各个域
DM.lngFields=DM.lngFieldsOrDM.intPaperSizeOrDM.intPaperLength_
OrDM.intPaperWidth
'设置为自定义纸张
DM.intPaperSize=256
'提示输入长度和宽度
DM.intPaperLength=InputBox("请输入纸张的长度(mm):")*10
DM.intPaperWidth=InputBox("请输入纸张的宽度(mm):")*10
'更新属性值
LSetDevString=DM
Mid(strDevModeExtra,1,94)=DevString.RGB
rpt.PrtDevMode=strDevModeExtra
EndIf
EndIf
'关闭报表并保存
DoCmd.CloseacReport,rptName,acSaveYes
'预览报表
DoCmd.OpenReportrptName,acViewPreview
EndSub
责任编辑:小草