10 måter å få fart på Macros

Som Excel-makroer blitt stadig mer robust og komplekse, kan du oppleve at de mister ytelse. Når man diskuterer makroer, er ordet ytelse
vanligvis synonymt med hastighet
. Hastighet er hvor raskt VBA prosedyrer utføre sine tiltenkte oppgaver. Følgende er ti måter å bidra til å holde Excel-makroer kjører på sitt optimale prestasjonsnivå.

Stanse førte beregninger

Visste du at hver gang en celle som rammer noen formel i regnearket endres eller manipulert, beregner Excel hele regnearket? I regneark som har en stor mengde formler, kan dette problemet drastisk tregere dine makroer.

Du kan bruke Application.Calculation eiendommen for å fortelle Excel for å bytte til manuell beregningsmodus. Når en arbeidsbok er i manuell beregningsmodus, vil arbeidsboken ikke beregne før du eksplisitt utløse en beregning ved å trykke på F9.

Place Excel til manuell beregningsmodus, kjøre koden din, og deretter bytte tilbake til automatisk beregning
modus. Sub Makro1 () Application.Calculation = xlCalculationManual 'Plasser makrokoden hereApplication.Calculation = xlCalculationAutomaticEnd Subsetting beregningen modus tilbake til xlCalculationAutomatic vil automatisk utløse en ny beregning av regnearket, så det er ikke nødvendig å trykke på F9-tasten etter at makroen kjøres.

Deaktivering ark skjermen oppdaterer

Du kan legge merke til at når makroer kjøres, gjør skjermen en god del flimring. Dette flimring er Excel prøver å tegne på skjermen for å vise den nåværende tilstanden i regnearket. Dessverre, hver gang Excel tegner på skjermen, tar opp minneressurser.

Du kan bruke Application.ScreenUpdating eiendommen for å deaktivere skjermoppdateringer før makroen er fullført. Deaktivering skjermen oppdatering sparer tid og ressurser, slik at makroen til å kjøre litt fortere. Etter at makrokode har kjørt ferdig, kan du slå skjermen oppdaterer igjen.
Sub Makro1 () Application.Calculation = xlCalculationManualApplication.ScreenUpdating = False 'Plasser makrokoden hereApplication.Calculation = xlCalculationAutomaticApplication.ScreenUpdating = TrueEnd SubAfter du setter ScreenUpdating eiendommen tilbake til True, vil Excel automatisk utløse en tegne på skjermen.

Slå av statuslinjen oppdateringer

Excel statuslinjen, som vises nederst i Excel-vinduet, normalt skjermer fremdriften av visse handlinger i Excel. Hvis makroen arbeider med mye data, vil statuslinjen ta opp noen ressurser.

Det er viktig å merke seg at å slå av skjermen oppdatering er atskilt fra å slå av statuslinjen displayet. Statuslinjen vil fortsette å bli oppdatert selv om du deaktiverer skjermen oppdatering. Du kan bruke Application.DisplayStatusBar eiendommen for å midlertidig deaktivere eventuelle status bar oppdateringer, ytterligere forbedre ytelsen til makro:
Sub Makro1 () Application.Calculation = xlCalculationManualApplication.ScreenUpdating = FalseApplication.DisplayStatusBar = False 'Plasser makrokode hereApplication .Calculation = xlCalculationAutomaticApplication.ScreenUpdating = TrueApplication.DisplayStatusBar = TrueEnd Sub
Hemmelig Excel til å ignorere hendelser

Du kan implementere makroer som event prosedyrer, forteller Excel til å kjøre viss kode når en regneark eller arbeidsbok endringer.

Noen ganger standard makroer gjøre endringer som vil utløse en hendelse prosedyre. For eksempel, hvis du har en standard makro som manipulerer flere celler på Ark1, hver gang en celle på at arket er endret, har makroen til pause mens Worksheet_Change arrangementet går.

Du kan legge til et annet nivå av ytelse øker ved å bruke EnableEvents eiendommen for å fortelle Excel til å ignorere hendelser mens makro kjøres.

Sett EnableEvents eiendom til False før du kjører makroen. Etter makroen kode er kjørt ferdig, kan du sette EnableEvents eiendommen tilbake til True.
Sub Makro1 () Application.Calculation = xlCalculationManualApplication.ScreenUpdating = FalseApplication.DisplayStatusBar = FalseApplication.EnableEvents = False 'Plasser makrokode hereApplication.Calculation = xlCalculationAutomaticApplication.ScreenUpdating = TrueApplication.DisplayStatusBar = TrueApplication.EnableEvents = TrueEnd Sub
Hiding sideskift

Hver gang makroen endrer antall rader, endrer antall kolonner, eller endrer side oppsett av en regneark, Excel tvunget til å ta tid å omberegne sideskift vist på arket.

Du kan unngå dette problemet ved ganske enkelt å skjule sideskift før du starter makroen.

Sett DisplayPageBreaks ført eiendom False å skjule sideskift. Hvis du ønsker å fortsette å vise sideskift etter dine makro kjøres, sett DisplayPageBreaks ført eiendom tilbake til True.
Sub Makro1 () Application.Calculation = xlCalculationManualApplication.ScreenUpdating = FalseApplication.DisplayStatusBar = FalseApplication.EnableEvents = FalseActivesheet.DisplayPageBreaks = False 'Plasser makrokoden hereApplication.Calculation = xlCalculationAutomaticApplication.ScreenUpdating = TrueApplication.DisplayStatusBar = TrueApplication.EnableEvents = TrueActivesheet.DisplayPageBreaks = TrueEnd Sub
Susppivottabell oppdateringer

Hvis makro manipulerer pivottabeller som inneholder store datakilder, kan du oppleve dårlig ytelse når du gjør ting som dynamisk legge til eller flytte pivot felt.

Du kan forbedre ytelsen til makro ved å suspendere beregning av pivot tabellen før alle pivot felt endringer er gjort. Bare still PivotTable.ManualUpdate eiendommen til True å utsette omberegning, kjøre makroen kode, og deretter sette PivotTable.ManualUpdate eiendommen tilbake til False å utløse ny beregning.
Sub Makro1 () ActiveSheet.PivotTables ("PivotTable1"). ManualUpdate = True 'plassere dine makrokode hereActiveSheet.PivotTables ("PivotTable1"). ManualUpdate = FalseEnd Sub
Steering klar av kopier og lim

Det er viktig å huske at selv om Macro Recorder sparer tid ved å skrive VBA-kode for deg, betyr det ikke alltid skrive mest mulig effektiv kode. Et godt eksempel er hvordan Macro Recorder fanger noen kopi-og-lim handling du utfører under opptak.

Du kan gi dine makroer en liten boost ved å kutte ut mellomledd og utfører en direkte kopi fra en celle til en destinasjon celle. Denne alternative koden bruker Destination argument for å omgå utklippstavlen og kopiere innholdet i celle A1 direkte til celle B1
Range ("A1") Kopier Destination:.. = Range ("B1")

Hvis du trenger å kun kopiere verdier (ikke formatering eller formler), kan du forbedre ytelsen enda mer ved å unngå Kopier metoden alle sammen. Bare sette verdien av målcellen til samme verdi som finnes i kildecellen. Denne metoden er om lag 25 ganger raskere enn å bruke kopieringsmetoden:..
Range ("B1") Verdi = Range ("A1") Verdi

​​Hvis du trenger å kopiere bare formler fra en celle til en annen ( ikke verdier eller formatering), kan du sette den formelen på destinasjonen cellen til den samme formelen som finnes i kildecellen..
Range ("B1") Formula = Range ("A1") Formula
Bruke Med uttalelsen

Når du tar opp makroer, vil du ofte manipulere samme objekt mer enn én gang. Du kan spare tid og forbedre ytelsen ved å bruke Med utsagnet til å utføre flere handlinger på et gitt objekt i ett skudd

Med uttalelsen benyttes i følgende eksempel forteller Excel til å gjelde alle formateringsendringene på en gang.:
Med Range ("A1"). Font .Bold = True .Italic = True .Underline = xlUnderlineStyleSingle End WithGetting inn i vanen med chunking handlinger inn med uttalelser vil ikke bare holde makroer kjører raskere, men også gjøre det lettere å lese makrokode.

Unngå Velg metode

Macro Recorder er glad i å bruke den Velg metode for å eksplisitt velge objekter før du tar handlinger på dem. Det er vanligvis ikke nødvendig å velge objekter før du arbeider med dem. Faktisk kan du dramatisk forbedre makro ytelsen ved å ikke bruke Select metoden.

Etter innspillingen makroer, gjøre det til en vane å endre den genererte koden for å fjerne Select metoder. I dette tilfellet ville det optimalisert kode ser ut som følgende:....
Sheets ("Ark1") Range ("A1") FormulaR1C1 = "1000" Sheets ("Ark2") Range ("A1") FormulaR1C1 = "1000" Sheets ("Ark3"). Range ("A1"). FormulaR1C1 = "1000"

Legg merke til at ingenting blir valgt. Koden bruker ganske enkelt objekt hierarki for å bruke de nødvendige handlinger.

Begrense turer til regnearket

En annen måte å få fart på makroer er å begrense antall ganger du refererer til regnearkdataene i kode. Det er alltid mindre effektiv til å hente data fra regnearket enn fra minnet. Det vil si, vil makroene kjøre mye raskere hvis de ikke stadig må samhandle med regnearket.

For eksempel følgende enkle kode krefter VBA å kontinuerlig gå tilbake til Sheets ("Ark1"). Range ("A1") for å få nummeret som trengs for sammenligningen blir utført i If-setning:
For ReportMonth = 1 til 12 Hvis Range ("A1") Verdi = ReportMonth Så MsgBox millioner /ReportMonthEnd IfNext ReportMonth

. En mye mer effektiv metode er å lagre verdien i Sheets ("Ark1"). Range ("A1") til en variabel kalt MyMonth. På denne måten refererer koden den MyMonth variabel i stedet for regnearket:
Dim MyMonth som IntegerMyMonth = Range ("A1") valuefor ReportMonth = 1 Til 12Hvis MyMonth = ReportMonth ThenMsgBox millioner /ReportMonthEnd IfNext ReportMonth

Tenk å utnytte variabler. å jobbe med data i minnet i motsetning til direkte å registrere regneark. Anmeldelser