Excel 2016 VBA Speed ​​Tips

VBA for Excel 2016 er rask, men det er ikke alltid raskt nok. (Dataprogrammer er aldri fort nok.) Hold lesing for å oppdage noen programmering eksempler du kan bruke for å få fart på makroer.

Slå av skjermen oppdaterer

Når du utfører en makro, kan du lene deg tilbake og se all den elektroniske handlingen som skjer i makro. Selv om du gjør dette kan være lærerikt, etter at du får makroen fungerer som den skal, er det ofte irriterende og kan redusere ytelsen til makro betraktelig. Heldigvis kan du deaktivere skjermen oppdatering som normalt oppstår når du kjører en makro. For å slå av skjermen oppdatering, bruk følgende uttalelse:
Application.ScreenUpdating = False

Hvis du vil at brukeren skal se hva som skjer når som helst i løpet av makro, bruker du følgende utsagn for å slå skjermen oppdatering igjen:
Application.ScreenUpdating = True

For å demonstrere forskjellen i hastighet, utføre denne enkle makro, som fyller en rekke med tall:
Sub FillRange () Dim r som Long, c As Long Dim Antall som Long Tall = 0 For r = 1 To 50 For c = 1 To 50 Antall = Antall + 1 celler (r, c) .Velg Cells (r, c) .Value = Antall Neste c Neste rive Sub

Du ser hver celle er valgt og verdien blir lagt inn i cellene. Nå settes følgende uttalelse i begynnelsen av prosedyren og utføre det igjen:
Application.ScreenUpdating = False

Rekkevidden er fylt mye raskere, og du trenger ikke se resultatet før makroen er ferdig kjører og skjerm oppdatering er (automatisk) er satt til Sann.
Når du debugging kode, programmet kjøres noen ganger ender et sted i midten uten å ha slått Screen oppdatering på igjen. Dette fører noen ganger Excel programvinduet for å bli helt svarer. Veien ut av dette frossen tilstand er enkelt: Gå tilbake til VBE, og utføre følgende uttalelse i vinduet som vises:
Application.ScreenUpdating = True
Slå av automatisk beregning

Hvis du har et regneark med mange komplekse formler, kan du oppleve at du kan øke hastigheten ting betraktelig ved å sette beregningsmodusen til manuell mens makro utfører. Når makro ferdig, satt beregningen modus tilbake til automatisk

Følgende uttalelse setter Excel beregningsmodusen til manuell.
Application.Calculation = xlCalculationManual

Execute neste setning å angi beregningsmodus til automatisk:
Application.Calculation = xlCalculationAutomaticIf koden din bruker celler med formelresultater, slå av beregningen betyr at cellene ikke vil bli etterberegnet med mindre du eksplisitt ber Excel til å gjøre det

eliminere disse pesky varselmeldinger!

Som du vet, kan en makro automatisk utføre en rekke handlinger. I mange tilfeller kan du starte en makro og deretter gå og henge ut i pausen rommet mens Excel gjør sine ting. Noen Excel operasjoner imidlertid vise meldinger som krever en menneskelig reaksjon. Disse typer meldingene betyr at du ikke kan la Excel uten tilsyn mens den utfører makroen -.. Med mindre du kjenner hemmelig triks
Du kan instruere Excel til å ikke vise disse typer varsler mens du kjører en makro

Hemmeligheten Trikset for å unngå disse advarslene er å sette inn følgende VBA uttalelse i din makro:
Application.DisplayAlerts = False

Excel utfører operasjonen standard for denne typen meldinger. I tilfellet av å slette et ark, er standardoperasjonen Slett. Hvis du er usikker på hva standard operasjon er, utføre en test for å se hva som skjer.

Når prosedyren er ferdig, Excel gjenopprettes det DisplayAlerts eiendommen til True. Hvis du trenger å slå varsler på igjen før prosedyren ender, bruk denne uttalelsen:
Application.DisplayAlerts = True
forenkle objektreferanser

Som du sikkert allerede vet, referanser til objekter kan bli veldig lange. For eksempel kan en fullt kvalifisert referanse til en Range objekt se slik ut:.
Arbeidsbøker ("MyBook.xlsx") Regneark ("Ark1") _ .Range ("InterestRate")

Hvis makroen ofte bruker dette området, kan det være lurt å lage et objekt variabel ved hjelp av Set-kommandoen. For eksempel tildeler følgende uttalelse denne Range objekt til et objekt variabel kalt Valuta:.
Sett Rate = Arbeidsbøker ("MyBook.xlsx") _ .Worksheets ("Ark1") Range ("InterestRate")

Etter definere dette objektet variabel, kan du bruke variabel rente i stedet for den lange referanse. For eksempel kan du endre verdien av cellen heter InterestRate:
Rate.Value = 0,085

Dette er mye lettere å skrive enn følgende uttalelse:.
Arbeidsbøker ("MyBook.xlsx") Regneark ("Ark1"). _ Range ("InterestRate") = 0,085

I tillegg til å forenkle din koding, ved hjelp av objektvariabler hastigheter makroene betraktelig.

Erklærte variabeltyper

Du vanligvis trenger ikke å bekymre seg om type data du tilordne til en variabel. Excel håndterer alle detaljene for deg bak kulissene. For eksempel, hvis du har en variabel som heter myVar, kan du tilordne et nummer av noe slag til den variabelen. Du kan også tildele en tekststreng til det senere i prosedyren.
Hvis du vil at prosedyrer for å utføre så fort som mulig, forteller Excel hvilken type data vil bli tildelt hver av variablene. Dette er kjent som erklære
en variabel type.

Generelt bør du bruke datatype som krever det minste antall bytes, men kan fortsatt håndtere alle data tildelt. Når VBA jobber med data, avhenger gjennomføring hastighet på antall bytes VBA har til rådighet. Med andre ord, jo færre byte data bruker, kan jo raskere VBA tilgang til og manipulere data. Et unntak fra dette er Integer datatype. Hvis hastigheten er kritisk, bruk Long datatypen i stedet.

Hvis du bruker et objekt variabel, kan du deklarere variabelen som en bestemt objekttype. Her er et eksempel:
Dim Ranger som RangeSet Rate = Arbeidsbøker ("MyBook.xlsx") _ .Worksheets ("Ark1") Range ("InterestRate")
Bruke With-End Med struktur
<. p> Har du behov for å sette en rekke egenskaper for et objekt? Koden kjører raskere hvis du bruker With-End Med struktur. En annen fordel er at koden kan være lettere å lese

Følgende kode bruker ikke With-End Med:.
Selection.HorizontalAlignment = xlCenterSelection.VerticalAlignment = xlCenterSelection.WrapText = TrueSelection.Orientation = 0Selection .ShrinkToFit = FalseSelection.MergeCells = False

Her er den samme koden, omskrevet for å bruke With-End Med:
Med Utvalg .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = True .Orientation = 0 .ShrinkToFit = False. MergeCells = FalseEnd Med

Når du bruker With-End With, må du kontrollere at hver setning begynner med en prikk.