Office中国论坛/Access中国论坛

标题: 如何实现打印份数 [打印本页]

作者: zxp    时间: 2009-2-21 13:28
标题: 如何实现打印份数
如何根据文本框中输入的数值打印相应的份数,例如:输入10按打印则自动打印10份
作者: Grant    时间: 2009-2-21 14:18
PrtDevMode 属性
参阅应用于示例特性使用 PrtDevMode 属性可以设置或返回“打印”对话框中为窗体或报表指定的打印设备模式信息。Variant 型,可读写。

expression.PrtDevMode
expression      必需。返回“应用于”列表中的一个对象的表达式。

说明
如果需要有关 PrtDevMode、PrtDevNames 和 PrtMip 属性的完整文档,强烈建议您查阅 Win32 Software Development Kit。

PrtDevMode 属性设置是一个 94 字节的结构,反映了 Win32 Software Development Kit 中定义的 DEVMODE 结构。有关 PrtDevMode 属性成员的完整信息,请参阅 Win32 Software Development Kit。

PrtDevMode 属性使用以下成员:

成员 说明
DeviceName 最多为 32 字节的字符串,该字符串用于指定驱动程序所支持的设备名称。例如,如果 Hewlett-Packard LaserJet IIISi 是指定的打印机,则字符串为“HP LaserJet IIISi”。每个打印机驱动程序都有唯一的字符串。
SpecVersion Integer 值,用于指定在 Win32 Software Development Kit 中 DEVMODE 结构的版本号。
DriverVersion Integer 值,用于指定打印机驱动程序开发者指定的打印机驱动程序的版本号。
Size Integer 值,用于指定 DEVMODE 结构的字节大小。(该值不包含在此结构之后的设备专用数据的可选 dmDriverData 成员)。如果应用程序只处理与驱动程序无关的部分数据,则可以使用该成员来求出此结构的长度,而不必考虑版本的不同。
DriverExtra Integer 值,以字节为单位指定在此结构之后的设备专用数据的可选 dmDriverData 成员大小。如果应用程序不使用设备专用的信息,可将该成员设为 0。
Fields Long 值,用于指定在 DEVMODE 结构中,哪些剩余的成员已经被初始化。  
Orientation Integer 值,用于指定纸张的打印方向。它可以是 1(纵向)或者 2(横向)。
PaperSize Integer 值,用于指定打印纸张的大小。若将该成员设为 0 或 256,则纸张的长度和宽度分别由 PaperLength 和 PaperWidth 成员指定。否则,可以将 PaperSize 成员设为预定值。有关可用值的详细信息,请参阅 PaperSize 成员值。
PaperLength Integer 值,以 1/10 毫米为单位来指定纸张的长度。对于 PaperSize 成员为自定义纸张大小,或为可以使用各种纸张大小的点阵打印机等设备而指定的纸张长度,该成员会将其覆盖。
PaperWidth Integer 值,以 1/10 毫米为单位来指定纸张宽度。该成员将覆盖 PaperSize 成员所指定的纸张宽度。
Scale Integer 值,用于指定打印输出的缩放比例因子。页面大小外观是从实际页面大小按 Scale/100 的比例因子进行缩放而得到的。例如,一张 8.5×11 英寸(信纸大小)的纸缩放值为 50,则包含的数据大小与 17×22 英寸的纸张中数据一样,因为前者输出的文本和图形其高度和宽度都是原始值的一半。
Copies Integer 值,如果打印设备支持多页副本,则用于指定打印份数。
DefaultSource Integer 值,用于指定默认送纸盒。有关可用值的详细信息,请参阅 DefaultSource 成员值。
PrintQuality Integer 值,用于指定打印机的分辨率。取值可为 -4(高)、-3(中)、-2(低)和 -1(草稿)。
Color Integer 值,用于指定彩色打印机的输出是否为彩色。取值可为 1(彩色)和 2(单色)。
Duplex Integer 值,用于指定可双面打印的打印机是否进行双面打印。值为 1(单面)、2(水平)和 3(垂直)。
YResolution Integer 值,以点/英寸 (dpi) 为单位指定打印机 y 轴方向的分辨率。如果打印机对该成员进行初始化,PrintQuality 成员指定的将是打印机的 x 轴方向分辨率的 dpi 值。
TTOption Integer 值,用于指定如何打印 TrueType 字体。有关可用值的详细信息,请参阅 TTOption 成员值。
Collate Integer 值,在打印多个副本时,用于指定是否归类打印。使用不归类打印可提供更快、更有效的输出,因为数据只向打印机发送一次。
FormName 最大长度为 16 个字符的字符串,用于指定要使用的纸张大小,例如,“Letter”或“Legal”。
Pad Long 值,用于为以后版本的需要而空出空白、字符或值。
Bits Long 值,以位/像素为单位,指定显示设备的颜色分辨率。
PW Long 值,以像素为单位,指定设备可视界面(屏幕或是打印机)的宽度。
PH Long 值,以像素为单位,指定设备可视界面(屏幕或是打印机)的高度。
DFI Long 值,用于指定设备的显示模式。
DFR Long 值,以赫兹(每秒的周期数)为单位,指定显示设备在特定显示模式下的扫描频率。


注释  可以使用 Visual Basic 设置 PrtDevMode 属性。

该属性设置在“设计”视图中可读写,而在其他视图中则为只读。

注意  打印机驱动程序可以在 DEVMODE 结构之后添加 94 字节设备专用数据。因此上述的 DEVMODE 数据不要超过 94 个字节,这一点很重要。

只有导出 ExtDeviceMode 函数的打印机驱动程序使用 DEVMODE 结构。

应用程序可以使用 DC_PAPERS、DC_PAPERSIZE 及 DC_PAPERNAMES 值调用 DeviceCapabilities 函数,以检索打印机支持的纸张大小和名称。

在设置 TTOption 的成员值之前,应用程序应该使用 DC_TRUETYPE 值调用 DeviceCapabilities 函数,以找出打印机驱动程序使用 TrueType 字体的方法。

示例
下面的示例使用 PrtDevMode 属性来检查用户定义的报表页面大小。

Private Type str_DEVMODE
    RGB As String * 94
End Type

Private Type type_DEVMODE
    strDeviceName As String * 32
    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 * 32
    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)

    Dim DevString As str_DEVMODE
    Dim DM As type_DEVMODE
    Dim strDevModeExtra As String
    Dim rpt As Report
    Dim intResponse As Integer
   
    ' Opens report in Design view.
    DoCmd.OpenReport rptName, acDesign
    Set rpt = Reports(rptName)
   
    If Not IsNull(rpt.PrtDevMode) Then
        strDevModeExtra = rpt.PrtDevMode
        
        ' Gets current DEVMODE structure.
        DevString.RGB = strDevModeExtra
        LSet DM = DevString
        If DM.intPaperSize = 256 Then
        
            ' Display user-defined size.
            intResponse = MsgBox("The current custom page size is " & _
                          DM.intPaperWidth / 254 & " inches wide by " & _
                          DM.intPaperLength / 254 & " inches long. Do you want " & _
                          "to change the settings?", vbYesNo + vbQuestion)
        Else
            ' Currently not user-defined.
            intResponse = MsgBox("The report does not have a custom page size. " & _
                          "Do you want to define one?", vbYesNo + vbQuestion)
        End If
        
        If intResponse = vbYes Then
            ' User wants to change settings. Initialize fields.
            DM.lngFields = DM.lngFields Or DM.intPaperSize Or _
                           DM.intPaperLength Or DM.intPaperWidth
               
            ' Set custom page.
            DM.intPaperSize = 256
            
            ' Prompt for length and width.
            DM.intPaperLength = InputBox("Please enter page length in inches.") * 254
            DM.intPaperWidth = InputBox("Please enter page width in inches.") * 254
            
            ' Update property.
            LSet DevString = DM
            Mid(strDevModeExtra, 1, 94) = DevString.RGB
            rpt.PrtDevMode = strDevModeExtra
        End If
    End If
   
    Set rpt = Nothing
   
End Sub
               
下面的示例显示如何更改报表的打印方向。该示例将打印方向从纵向切换到横向,或是从横向切换到纵向,这取决于报表当前的打印方向。

Public Sub SwitchOrient(ByVal strName As String)

    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
   
    ' 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.
        If DM.intOrientation = DM_PORTRAIT Then
            DM.intOrientation = DM_LANDSCAPE
        Else
            DM.intOrientation = DM_PORTRAIT
        End If
        
        ' Update property.
        LSet DevString = DM
        Mid(strDevModeExtra, 1, 94) = DevString.RGB
        rpt.PrtDevMode = strDevModeExtra
    End If
   
    Set rpt = Nothing
   
End Sub
作者: t小宝    时间: 2009-2-21 15:46
简单一点就用 PrintOut 方法
作者: andymark    时间: 2009-2-21 15:46
DoCmd.PrintOut   里面有参数打印多份的
作者: chaojianan    时间: 2009-2-21 16:07
docmd.printout学习了。
作者: tz-chf    时间: 2009-2-21 16:11
或循环调用openreport
作者: zxp    时间: 2009-2-26 12:18
printout 感谢
作者: citizzj    时间: 2009-3-7 18:59
可以试试循环




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3