VBA Calculate - Now, Workbook, Worksheet eller Range

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.

Du vil bidra til utvikling av området, dele siden med vennene dine

wave wave wave wave wave