代码之家  ›  专栏  ›  技术社区  ›  Lance Roberts

在Excel中打印速度更快

  •  3
  • Lance Roberts  · 技术社区  · 16 年前

    Excel(使用VBA)的打印功能非常慢。我希望有人能加快打印速度(不用Excel4宏技巧)。我现在是这样做的:

    Application.ScreenUpdating = False
    
    With ActiveSheet.PageSetup
    
      -various setup statements which I've already minimized-
    
    End With   
    ActiveSheet.PrintOut
    
    Application.ScreenUpdating = True
    
    3 回复  |  直到 6 年前
        1
  •  8
  •   Mike Rosenblum    15 年前

    是的,设置页面设置属性时速度非常慢。

    你已经准备好了 Application.ScreenUpdating = False ,这很好,但在这种情况下,同样重要的一步是 Application.Calculation = xlCalculationManual . (最好保存这些设置,然后在最后将其还原为原始设置。)

    另外,每个pagesetup属性的get属性非常快,而只有属性集速度很慢。因此,您应该测试新的属性设置,以确保它与现有的属性值不同,以防止不必要的(昂贵的)调用。

    考虑到所有这些,您应该能够使用如下所示的代码:

    Dim origScreenUpdating As Boolean
    origScreenUpdating = Application.ScreenUpdating
    Application.ScreenUpdating = False
    
    Dim origCalcMode As xlCalculation
    origCalcMode =  Application.Calculation
    Application.Calculation = xlCalculationManual
    
    With ActiveSheet.PageSetup
        If .PrintHeadings <> False Then .PrintHeadings = False
        If .PrintGridlines <> False Then .PrintGridlines = False
        If .PrintComments <> xlPrintNoComments Then .PrintComments = xlPrintNoComments
        ' Etc...
    End With
    
    Application.ScreenUpdating = origScreenUpdating
    Application.Calculation = origCalcMode
    

    编辑:几个更新:

    1. 对于Excel 2010及更高版本,您可以使用“application.printcommunication”属性,而对于Excel 2007及更低版本,您可以使用“executeexcel4macro”。有关详细信息,请参阅 Migrating Excel 4 Macros to VBA .

    2. 对于Excel2007及以下版本,另一个有趣的技巧是将打印机驱动程序临时分配给“Microsoft XPS文档编写器”,然后将其设置回原处。打印速度可提高3倍。请参阅: Slow Excel PageSetup Methods .

    希望这有帮助…

        2
  •  2
  •   user107387    16 年前

    如果需要将页面设置自定义从一个工作表复制到工作簿中的多个工作表,则在继续Michael的文章并回答@rhc的问题时,以下代码也可能有助于您:

    Public Sub CopyPageSetupToAll(ByRef SourceSheet As Worksheet)
        ' Raise error if invalid source sheet is passed to procedure
        '
        If (SourceSheet Is Nothing) Then
            Err.Raise _
                Number:=vbErrorObjectVariableNotSet, _
                Source:="CopyPageSetupToAll", _
                Description:="Unable to copy Page Setup settings: " _
                     & "invalid reference to source sheet."
            Exit Sub
        End If
    
        SourceSheet.Activate
    
        With SourceSheet.PageSetup
            ' ...
            ' place PageSetup customizations here
            ' ...
        End With
    
        SourceSheet.Parent.Worksheets.Select
        Application.SendKeys "{ENTER}", True
        Application.Dialogs(xlDialogPageSetup).Show
    End Sub
    

    或者,您也可以修改创建临时工作表的过程以承载页面设置更改,然后将这些更改传播到工作簿中的其他工作表:

    Public Sub CopyPageSetupToAll(ByRef SourceBook As Workbook)
        Dim tempSheet As Worksheet
    
        ' Raise error if invalid workbook is passed to procedure
        '
        If (SourceBook Is Nothing) Then
            Err.Raise _
                Number:=vbErrorObjectVariableNotSet, _
                Source:="CopyPageSetupToAll", _
                Description:="Unable to copy Page Setup settings: " _
                     & "invalid reference to source workbook."
            Exit Sub
        End If
    
        Set tempSheet = SourceBook.Worksheets.Add
    
        tempSheet.Activate
    
        With tempSheet.PageSetup
            ' ...
            ' place PageSetup customizations here
            ' ...
        End With
    
        SourceBook.Worksheets.Select
        Application.SendKeys "{ENTER}", True
        Application.Dialogs(xlDialogPageSetup).Show
        tempSheet.Delete
    
        Set tempSheet = Nothing
    End Sub
    

    由于使用了 SendKeys() 功能与 Application.Dialogs 功能,此代码不提供最干净的解决方案。但是,它可以完成任务。:)

        3
  •  0
  •   rhc    16 年前

    如果您希望工作簿中每个选项卡的页面设置基本相同,可以通过设置一个工作表,然后以某种方式将该工作表的设置复制到其他工作表来加快速度吗?这有可能吗?