名位大师,帮帮我啦:
报表打印要求:在程序中可以选择1.打印全部报表2.打印奇数页报表3.打印偶数页报表,报表工具用:ActiveReports ,怎么写程序呀?你有没有例子,发个给我啦,项目快要上线了,急啊!!! 谢啦.  

解决方案 »

  1.   


    ActiveReports 安装目录下有例子的
      

  2.   

    参考:Private Sub OverlayForm(cvFormLayout As Canvas)
    Dim cv As Canvas
    ' Apply a preprinted canvas object tyo all pages
    ' in the report
    For Each cv In Pages
    cv.Overlay cvFormaLayout
    Next
    End SubPrivate Sub PrintDuplex(ar As DDActiveReport)
    Dim I As Integer Printer.StartJob
    ' print all odd pages, pause, then print all even pages
          '-----打印奇数页 For I = 0 To Pages.Count Step 2
    Printer.PrintPage Pages(I)
    Next I
    s = "Printed first side, " & _"turn the pages and click OK to print second side" & _
    "or Cancel to abort the print job" If MsgBox(s,vbOKCancel) = vbOk Then
    ’----打印偶数页
    For I = 1 To Pages.Count  Step 2
    Printer.PrintPage Pages(I)
    Next I
    End If
    Printer.EndJob
    End Sub
      

  3.   

    谢谢上面的名位大师的回复.非常感谢colorslife(霜水茶)提供的资料,我试下看行不行.呵呵
      

  4.   

    leo2003(【健者天行】):
    你可不可以告诉我ActiveReports 安装目录下有这个例子的名称是什么?
      

  5.   

    colorslife(霜水茶):
    我在界面里调用时,它提示:"用户定义类型未定义"啊,可能是我不会调用吧.
      

  6.   

    我把界面代码贴上来,各位大师帮帮忙:Option Explicit
    Dim printType As String
    Private Sub ComOk_Click()If OptEvenPrint.Value = True Then
        printType = "EvenPrint"          '打印偶数页
    ElseIf OptOddPrint.Value = True Then
        printType = "OddPrint"             '打印奇数页
    Else
        printType = "AllPrint"             '全部打印
    End IfPrintDuplex (Report1)  '调用方法进行打印报表,报表名为:Report1
    End SubPrivate Sub PrintDuplex(ar As DDActiveReport)
    Dim I As Integer
    Dim s As String
    s = "Printed first side, " & _
        "turn the pages and click OK to print second side" & _
        "or Cancel to abort the print job"    Printer.StartJob
        ' print all odd pages, pause, then print all even pages
          
    '-----打印奇数页
    If printType = "OddPrint" Then    For I = 0 To Pages.Count Step 2
            Printer.PrintPage Pages(I)
        Next I    If MsgBox(s, vbOKCancel) = vbOK Then
    '----打印偶数页
            For I = 1 To Pages.Count Step 2
                Printer.PrintPage Pages(I)
            Next I
        End If
        Printer.EndJob
        
    ElseIf printType = "EvenPrint" Then'-----打印偶数页
        For I = 1 To Pages.Count Step 2
            Printer.PrintPage Pages(I)
        Next I    If MsgBox(s, vbOKCancel) = vbOK Then
    '----打印奇数页
            For I = 0 To Pages.Count Step 2
                Printer.PrintPage Pages(I)
            Next I
        End If
        Printer.EndJobElse
    '----打印全部页
        For I = 0 To Pages.Count Step 1
            Printer.PrintPage Pages(I)
        Next I
    End IfEnd Sub
      

  7.   


    新建一Form 名为frmReport,加一ARView21控件Public rs As ADODB.Recordset
    Public PrintOddEven As IntegerPrivate Sub ARView21_LoadCompleted()
        PreViewOddEven PrintOddEven
    End SubPrivate Sub PreViewOddEven(ByVal PageType As Integer)
        '----PageType是1,则显示奇数页,PageType是2,则显示偶数页,否则显示全部
        Dim i As Integer
        Dim PG As Pages
        Dim strRange As String
        Dim CV As Canvas
        
        Debug.Print ARView21.Pages.Count
        If PageType <> 1 And PageType <> 2 Then Exit Sub    For i = PageType To ARView21.Pages.Count Step 2
            strRange = strRange & CStr(i) & ","
        Next
        
        strRange = Left(strRange, Len(strRange) - 1)
        
        Set PG = ARView21.Pages.GetPagesInRange(strRange)    ARView21.Pages.RemoveAll
        ARView21.Pages.Commit
        
        For Each CV In PG
            ARView21.Pages.Insert ARView21.Pages.Count, CV
        Next
        
        ARView21.Pages.Commit    ARView21.Refresh
        Set PG = Nothing
        Set CV = Nothing
    End Sub
    Private Sub Form_Load()
        ARView21.Move Me.ScaleLeft, Me.ScaleTop, Me.ScaleWidth, Me.ScaleHeight
        InitReprot
    End SubPrivate Sub Form_Resize()
        ARView21.Move Me.ScaleLeft, Me.ScaleTop, Me.ScaleWidth, Me.ScaleHeight
    End SubPrivate Sub InitReprot()
        Set ActiveReport1.DataControl1.Recordset = rs
        ActiveReport1.Restart
        ActiveReport1.Refresh
        
        ARView21.ReportSource = ActiveReport1
        ARView21.Refresh
    End Sub-----------
    调用:在调用窗体中
    Private Sub PrintEven()
        Dim frm1 As New frmReport
        Set frm1.rs = rs
        frm1.PrintOddEven = 2
        
        frm1.Show 1
        Unload frm1
        Set frm1 = Nothing
        If rs.RecordCount >= 1 Then rs.MoveFirst
    End SubPrivate Sub PrintOdd()
        Dim frm1 As New frmReport
        Set frm1.rs = rs
        frm1.PrintOddEven = 1
        
        frm1.Show 1
        Unload frm1
        Set frm1 = Nothing
        If rs.RecordCount >= 1 Then rs.MoveFirst
    End Sub
    ---------------
    在本机上测试成功,你试试……
      

  8.   

    搞定了!在此非常感谢colorslife(霜水茶)和楼上的名位大师.呵呵
      

  9.   

    给分漏掉了xiaoMONKEY(小猴),呵呵,不好意思了!