设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 4081|回复: 8
打印 上一主题 下一主题

[报表] 关于自定义报表的问题

[复制链接]
跳转到指定楼层
1#
发表于 2003-2-11 02:41:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问题:无法在页面设置中更改页边距
函数如下:

Function PrintReport(strReportName As String, lngTopMagin As Long, lngLeftMagin As Long)
'===================================================================
'进行打印设置
'===================================================================
On Error GoTo me_error

Dim prt As Printer
Set prt = Application.Printers(0)
prt.PaperSize = acPRPSA3
prt.TopMargin = lngTopMagin * 567 / 10 '单位为mm
prt.LeftMargin = (lngLeftMagin - 20) * 567 / 10 '单位为mm

DoCmd.OpenReport strReportName, acPreview
With Reports(strReportName).Printer
    .PaperSize = prt.PaperSize
    .TopMargin = lngTopMagin * 567 / 10
    .LeftMargin = (lngLeftMagin - 20) * 567 / 10
End With
'DoCmd.PrintOut acPages, 1, 1, , 1
' 关闭报表并保存
DoCmd.Close acReport, strReportName, acSaveYes
myerror:
Exit Function

me_error:
MsgBox "错误代号:" & err.number & Chr(13) & "错误提示:" & err.Description, vbCritical, "错误"
    Resume myerror


End Function
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
 楼主| 发表于 2003-2-11 02:49:00 | 只看该作者
所用的ACCESS版本:ACCESS XP
3#
发表于 2003-2-11 03:52:00 | 只看该作者
这些函数似乎是改变纸张比例,方向的,关于页边设置,我也不会,我都想知道
4#
 楼主| 发表于 2003-2-11 04:51:00 | 只看该作者
函数是我写的,帮助中讲是设置页边距的,但下起作用
5#
发表于 2003-2-11 05:13:00 | 只看该作者
作    者:朱亦文  
发布日期:2002年12月5日
摘    要:本例讲述了,如何在ACCESS的报表中使用自定义纸张,及设置自定义纸张大小

正    文:

将下列代码粘贴到一个新模块中,并调用CheckCustomPage过程检查指定报表的自定义纸张。

[code]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 CheckCustomPage(ByVal rptName As String)
' 用    途:检查报表的自定义纸张
' 调用方法:Call CheckCustomPage(rptName)
' 参数说明:rptName: 为检查的报表名称
' 调用举例:设有名为"MyReport"的报表,
'           Call CheckCustomPage("MyReport")
'           当该报表使用的是自定义纸张时,则显示自定义纸张的大小,
'           并询问是否更改纸张的大小并进行设置;
'           当该报表使用的是标准纸张时,则询问是否使用自定义纸张,
'           如果选择“是”,则要求输入纸张的大小并进行设置。

    Dim DevString As str_DEVMODE
    Dim DM As type_DEVMODE
    Dim strDevModeExtra As String
    Dim rpt As Report
    Dim intResponse As Integer
   
    ' 在设计视图下打开报表
    DoCmd.OpenReport rptName, acDesign

    Set rpt = Reports(rptName)
    If Not IsNull(rpt.PrtDevMode) Then
        strDevModeExtra = rpt.PrtDevMode
        
        ' 获取当前的 DEVMODE 结构
        DevString.RGB = strDevModeExtra
        LSet DM = DevString
        
        If DM.intPaperSize = 256 Then
            ' 显示用户自定义纸张的尺寸
            intResponse = MsgBox("当前的自定义纸张为(mm):" & _
                          DM.intPaperWidth / 10 & " (宽) X " & _
                          DM.intPaperLength / 10 & " (长)。 你想改变吗?", _
                          vbYesNo + vbQuestion)
        Else
            ' 非自定义纸张
            intResponse = MsgBox("报表没有使用自定义纸张。 " & _
                          "你想使用自定义纸张吗?", vbYesNo + vbQuestion)
        End If
        If intResponse = 6 Then
            ' 用户要改变纸张设置,初始化 DM 的各个域
            DM.lngFields = DM.lngFields Or DM.intPaperSize Or DM.intPaperLength _
                Or DM.intPaperWidth
            ' 设置为自定义纸张
            DM.intPaperSize = 256

            ' 提示输入长度和宽度
            DM.intPaperLength = InputBox("请输入纸张的长度(mm):") * 10
            DM.intPaperWidth = InputBox("请输入纸张的宽度(mm):") * 10
            
            ' 更新属性值
            LSet DevString = DM
            Mid(strDevModeExtra, 1, 94) = DevString.RGB
            rpt.PrtDevMode = strDevModeExtra
        End If
    End If
   
    ' 关闭报表并保存
    DoCmd.Close acReport, rptName, acSaveYes
    ' 预览报表
    DoCmd.OpenReport rptName, acViewPreview
   
End Sub

6#
 楼主| 发表于 2003-2-11 07:15:00 | 只看该作者
笛子兄:
1、我说的是页边距而不是报表的尺寸
2、老朱的函数在MDE中不行

点击这里给我发消息

7#
发表于 2003-2-11 16:41:00 | 只看该作者
我看以前的旧贴,只是知道XP下可以解决此问题,在2000下需要装补丁(没试过),我在公司里没有XP,家里的电脑被“征用”,没法调试,不过论坛上有很多旧贴,不知真的能否解决,倒是没有试过。
8#
发表于 2003-2-14 02:53:00 | 只看该作者
从来都未见过效果
9#
发表于 2009-10-4 20:58:09 | 只看该作者
有没有简单一点的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-2 20:15 , Processed in 0.110295 second(s), 32 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表