Skrive raskere i Excel

stemmer
3

Utskriften funksjonaliteten til Excel (ved hjelp av VBA) er ekstremt treg. Jeg håper noen har en måte å påskynde den utskrift opp (uten å bruke Excel 4 Macro knep). Her er hvordan jeg gjør det nå:

Application.ScreenUpdating = False

With ActiveSheet.PageSetup

  -various setup statements which I've already minimized-

End With   
ActiveSheet.PrintOut

Application.ScreenUpdating = True
Publisert på 23/10/2008 klokken 14:17
kilden bruker
På andre språk...                            


3 svar

stemmer
8

Ja, Pagesetup egenskapene er svært treg når du setter dem.

Du har allerede satt Application.ScreenUpdating = False, noe som er bra, men en like (eller mer) viktig skritt i denne saken er å sette Application.Calculation = xlCalculationManual. (Det er best hvis du lagre disse innstillingene, og deretter gjenopprette dem til den opprinnelige på slutten.)

I tillegg eiendommen får for hver Pagesetup eiendom er svært raskt, mens det er bare eiendommen sett som er så treg. Derfor bør du teste den nye innstillingen for å sørge for at det ikke allerede er det samme som den eksisterende eiendomsverdi for å unngå en unødvendig (og dyre) samtale.

Med alt dette i tankene, bør du være i stand til å bruke kode som ser omtrent slik ut:

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: Et par oppdateringer:

  1. For Excel 2010 og nyere kan du benytte deg av 'Application.PrintCommunication' eiendom, mens for Excel 2007 og under, kan du benytte deg av 'ExecuteExcel4Macro'. For mer informasjon, se Overføre Excel 4-makroer til VBA .

  2. For Excel 2007 og under, er et annet interessant triks for å midlertidig tilordne skriverdriveren til 'Microsoft XPS Document Writer' og deretter sette den tilbake. Utskriftshastigheten kan forbedre ved 3x. Se: Slow Excel Pagesetup metoder .

Håper dette hjelper...

Svarte 23/10/2008 kl. 17:38
kilden bruker

stemmer
0

hvis du ønsker å ha i utgangspunktet de samme sideinnstillingene for hver kategori i en arbeidsbok kan du øke hastigheten ting opp ved å sette opp en workshet og deretter kopiere regnearket innstillinger eller annen måte til andre regneark? Er dette mulig?

Svarte 12/11/2008 kl. 14:52
kilden bruker

stemmer
2

I å fremme Michael innlegg og svare @ RHC spørsmål, kan følgende kode også hjelpe deg hvis behovet for å kopiere Sideoppsett tilpasninger fra et enkelt regneark til flere regneark i en arbeidsbok:

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

Alternativt kan du også endre prosedyren for å opprette en midlertidig regneark for å være vert for endringene Sideoppsett, og deretter spre disse endringene ut til andre regneark i arbeidsboken:

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

På grunn av bruken av SendKeys()funksjon og Application.Dialogsfunksjonalitet, gjør denne koden ikke gi renest mulig løsning. Men det får jobben gjort. :)

Svarte 14/05/2009 kl. 21:33
kilden bruker

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