Denne opplæringen vil lære deg alle de forskjellige beregningsalternativene i VBA.
Som standard beregner Excel alle åpne arbeidsbøker hver gang en arbeidsbokendring gjøres. Det gjør dette ved å følge et beregningstre der hvis celle A1 endres, oppdaterer den alle cellene som er avhengige av celle A1 og så videre. Dette kan imidlertid føre til at VBA -koden din kjøres ekstremt sakte, som hver gang en celle endres, må Excel beregne på nytt.
For å øke VBA -hastigheten vil du ofte deaktivere automatiske beregninger i begynnelsen av prosedyrene:
1 | Application.Calculation = xlManual |
og aktiver den på nytt på slutten:
1 | Application.Calculation = xlAutomatic |
Men hva om du vil beregne alle (eller deler) av arbeidsbøkene dine i prosedyren din? Resten av denne opplæringen vil lære deg hva du skal gjøre.
Beregn nå
Du kan bruke kommandoen Beregn til å beregne alt på nytt (i alle åpne arbeidsbøker):
1 | Regne ut |
Dette er vanligvis den beste metoden å bruke. Du kan imidlertid også utføre smalere beregninger for forbedret hastighet.
Bare beregne ark
Du kan også be VBA om å bare beregne et bestemt ark.
Denne koden beregner det aktive arket på nytt:
1 | ActiveSheet.Calculate |
Denne koden beregner ark 1 på nytt:
1 | Ark ("Ark1"). Beregn |
Beregn rekkevidde
Hvis du trenger en smalere beregning, kan du be VBA om å beregne bare et celleområde:
1 | Ark ("Ark1"). Område ("a1: a10"). Beregn |
Beregn individuell formel
Denne koden beregner bare en individuell celleformel:
1 | Område ("a1"). Beregn |
Beregn arbeidsbok
Det er ikke noe VBA -alternativ for å beregne bare en hel arbeidsbok. Hvis du trenger å beregne en hel arbeidsbok, er det beste alternativet å bruke kommandoen Beregn:
1 | Regne ut |
Dette vil beregne alle åpne arbeidsbøker. Hvis du virkelig er bekymret for hastighet, og vil beregne en hel arbeidsbok, kan du kanskje være mer selektiv om hvilke arbeidsbøker som er åpne om gangen.
Beregn arbeidsbok - metoder som ikke fungerer
Det er et par metoder du kan bli fristet til å bruke for å tvinge VBA til å beregne bare en arbeidsbok, men ingen av dem vil fungere skikkelig.
Denne koden går gjennom hvert regneark i arbeidsboken og beregner arkene ett om gangen:
1234567 | Sub Recalculate_Workbook ()Dim ws Som regnearkFor hver uke i regnearkws.BeregneNeste wsSlutt Sub |
Denne koden fungerer fint hvis alle regnearkene dine er "frittstående", noe som betyr at ingen av arkene dine inneholder beregninger som refererer til andre ark.
Men hvis regnearkene dine refererer til andre ark, kan det hende at beregningene ikke oppdateres skikkelig. For eksempel, hvis du beregner Sheet1 før Sheet2, men Sheet1s formler er avhengige av beregninger gjort i Sheet2, vil ikke formlene inneholde de mest oppdaterte verdiene.
Du kan også prøve å velge alle ark samtidig og beregne det aktive arket:
12 | ThisWorkbook.Sheets.SelectActiveSheet.Calculate |
Dette vil imidlertid forårsake det samme problemet.