3

Excelの印刷機能(VBAを使用)は非常に低速です。誰かが(Excel 4マクロのトリックを使用せずに)印刷を高速化する方法を持っていることを望んでいます。これが私が今それをする方法です:

Application.ScreenUpdating = False

With ActiveSheet.PageSetup

  -various setup statements which I've already minimized-

End With   
ActiveSheet.PrintOut

Application.ScreenUpdating = True
4

3 に答える 3

9

はい、PageSetup プロパティを設定すると非常に遅くなります。

すでに を設定していますがApplication.ScreenUpdating = False、これは良いことですが、この場合、同様に (またはそれ以上に) 重要なステップは を設定することApplication.Calculation = xlCalculationManualです。(これらの設定を保存し、最後に元に戻すことをお勧めします。)

さらに、各 PageSetup プロパティのプロパティ取得は非常に高速ですが、非常に遅いのはプロパティ セットだけです。したがって、不要な (そしてコストのかかる) 呼び出しを防ぐために、新しいプロパティ設定をテストして、既存のプロパティ値と同じでないことを確認する必要があります。

これらすべてを念頭に置いて、次のようなコードを使用できるはずです。

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」を使用できます。詳細については、「Excel 4 マクロを VBA に移行する」を参照してください。

  2. Excel 2007 以前の場合、もう 1 つの興味深い方法は、プリンター ドライバーを一時的に「Microsoft XPS Document Writer」に割り当ててから元に戻すことです。印刷速度が 3 倍向上します。参照: Excel の PageSetup メソッドが遅い

お役に立てれば...

于 2008-10-23T19:38:03.043 に答える
2

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、このコードは可能な限りクリーンなソリューションを提供していません。しかし、それは仕事を成し遂げます。:)

于 2009-05-14T23:33:27.207 に答える
0

ワークブックのすべてのタブで基本的に同じページ設定を使用したい場合は、1つのワークシートを設定し、そのワークシートの設定を他のワークシートにコピーすることで、処理を高速化できますか?これは可能ですか?

于 2008-11-12T16:52:10.490 に答える