我用个For循环将打印,但打印机最终打出来的并没按我流水号的顺序。比如我是按1到100的流水顺序,打出来有时是1到10,10下面可能不是11是12,13,11跑到后面去了  Private Sub mnPRINT_Do_Click(Index As Integer)
Dim intPage As Integer
Dim intRes As Integer
Dim lRetval&
Dim StopTheTimer As Boolean    Select Case Index
        Case 0      '仅打印一页
            If mViewNo > 0 Then
                Call StatusMessage("印刷中...")
                Call Page_Print(mViewNo)
                Call StatusMessage("")
            End If
        Case 1      '全部印刷
            Screen.MousePointer = vbHourglass
            For intPage = 1 To UBound(mViewFile)
                Call StatusMessage(" " & CStr(intPage) & "/" & CStr(UBound(mViewFile)) & _
                                   
 Call Page_Print(intPage)
            DoEvents(
            Next intPage
            Call StatusMessage("")
            Screen.MousePointer = vbDefault
        Case 3      '印刷设定
            ' 
            On Error Resume Next
            brwPrint.Visible = True
            brwPrint.ExecWB OLECMDID_PAGESETUP, OLECMDEXECOPT_DODEFAULT
            brwPrint.Visible = False
    End Select
End Sub 
Private Sub Page_Print(ByVal iPrintPageNo As Integer)
Dim intRes As Integer
 On Error Resume Next
    
    With brwPrint
        .Visible = True
        mPrintViewFlg = False
        .Navigate2 mViewFile(iPrintPageNo)      '
        Do Until mPrintViewFlg
            intRes = DoEvents() '表示完了
             Loop
        .ExecWB OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER, 0, 0        .Visible = False
    End With
  End Sub

解决方案 »

  1.   

    这是由于DoEvents导致代码重入引起的,应在打印过程中避免使用DoEvents。
      

  2.   

    不要使用
    Do Until mPrintViewFlg 
       intRes = DoEvents() '表示完了 
    Loop 
    而是使用事件机制,在DocumentComplete里写打印当前页代码。
      

  3.   

    我是不是把这部分代码写入 DocumentComplete 事件中么?
      

  4.   


    我如果在Page_Print()函数前面延长1秒钟的话,打印的顺序就没有颠倒的。,大师,你认为还有什么可能呢?
    我的打印页中没有frame阿。请指教
      

  5.   


    大师,我用 
     For intPage=1 To UBound(mViewFile)
        Call Page_Print(intPage)
    Next intPage 这样For循环来批量打印没有问题吧,实在不好意思。问这么多。
      

  6.   

    仔细看看DoEvents的帮助内容就知道为什么了!