Jak drukować szybciej w Excel VBA?

głosy
3

Funkcjonalność druku Excel (przy użyciu VBA) jest bardzo powolny. Mam nadzieję, że ktoś ma sposób przyspieszając druk (bez użycia makr Excel 4 trik). Oto jak zrobić to teraz:

Application.ScreenUpdating = False

With ActiveSheet.PageSetup

  -various setup statements which I've already minimized-

End With   
ActiveSheet.PrintOut

Application.ScreenUpdating = True
Utwórz 23/10/2008 o 17:17
źródło użytkownik
W innych językach...                            


3 odpowiedzi

głosy
8

Tak, właściwości PageSetup są bardzo powolne, gdy je ustawić.

Masz już ustawione Application.ScreenUpdating = False, co jest dobre, ale równie (lub więcej) ważny krok w tym przypadku jest ustawiony Application.Calculation = xlCalculationManual. (Jest to najlepiej, jeśli zapisać te ustawienia, a następnie przywrócić je do pierwotnego na końcu).

Dodatkowo, get właściwość dla każdej nieruchomości PageSetup jest bardzo szybki, a to tylko zestaw właściwość, że jest tak powolny. Dlatego należy przetestować nowe ustawienia właściwości, aby upewnić się, że nie jest już taka sama, jak w istniejącej wartości nieruchomości w celu uniknięcia zbędnych (i drogich) połączenia.

Mając to wszystko na uwadze, powinieneś być w stanie wykorzystać kod, który wygląda mniej więcej tak:

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

Edit: Kilka aktualizacji:

  1. Excel 2010 i powyżej można wykorzystywać majątku „Application.PrintCommunication”, natomiast dla programu Excel 2007 i poniżej, można skorzystać z „ExecuteExcel4Macro”. Aby uzyskać więcej informacji, zobacz Migracja Excel 4 makr VBA .

  2. Excel 2007 i poniżej, kolejny ciekawy trik jest tymczasowo przypisanie sterownika drukarki do „Microsoft XPS Document Writer”, a następnie ustawić go z powrotem. Szybkość drukowania może poprawić przez 3x. Zobacz: Powolne Excel PageSetup Metody .

Mam nadzieję że to pomoże...

Odpowiedział 23/10/2008 o 20:38
źródło użytkownik

głosy
2

W promowaniu słupek Michaela i odpowiadając na pytanie @ RHC w poniższy kod może również pomóc w razie potrzeby skopiować stronę dostosowania konfiguracji z jednego arkusza do wielu arkuszy w skoroszycie:

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

Alternatywnie, można również zmodyfikować procedurę, aby utworzyć tymczasowy arkusz gościć swoją stronę zmiany ustawień, a następnie propagować te zmiany na zewnątrz do innych arkuszy w skoroszycie:

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

Ze względu na korzystanie z SendKeys()funkcji i Application.Dialogsfunkcjonalności, kod ten nie oferuje najczystszy z możliwych rozwiązań. Jednakże, dostaje zadanie. :)

Odpowiedział 15/05/2009 o 00:33
źródło użytkownik

głosy
0

jeśli chcesz mieć w zasadzie te same ustawienia strony na każdej karcie w skoroszycie można przyspieszyć poprzez utworzenie jednego workshet a następnie skopiowanie ustawień tym skoroszycie jakoś do innych arkuszy? czy to możliwe?

Odpowiedział 12/11/2008 o 17:52
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more