VBA Calculate - Now, Workbook, Worksheet eller Range

Denna handledning lär dig alla de olika beräkningsalternativen i VBA.

Som standard beräknar Excel alla öppna arbetsböcker varje gång en arbetsbokändring görs. Det gör detta genom att följa ett beräkningsträd där om cell A1 ändras, uppdaterar den alla celler som är beroende av cell A1 och så vidare. Detta kan dock orsaka att din VBA -kod körs extremt långsamt, som varje gång en cell ändras måste Excel beräkna om.

För att öka din VBA -hastighet vill du ofta inaktivera automatiska beräkningar i början av dina procedurer:

1 Application.Calculation = xlManual

och återaktivera det i slutet:

1 Application.Calculation = xlAutomatic

Men vad händer om du vill beräkna alla (eller delar) av dina arbetsböcker inom ditt förfarande? Resten av denna handledning lär dig vad du ska göra.

Beräkna nu

Du kan använda kommandot Beräkna för att beräkna om allt (i alla öppna arbetsböcker):

1 Beräkna

Detta är vanligtvis den bästa metoden att använda. Men du kan också utföra smalare beräkningar för förbättrad hastighet.

Beräkna endast blad

Du kan också berätta för VBA att bara beräkna ett visst blad.

Denna kod beräknar det aktiva arket igen:

1 ActiveSheet.Calculate

Denna kod beräknar om blad 1:

1 Ark ("Ark1"). Beräkna

Beräkna intervall

Om du behöver en smalare beräkning kan du be VBA att beräkna endast ett cellintervall:

1 Ark ("Ark1"). Område ("a1: a10"). Beräkna

Beräkna individuell formel

Denna kod beräknar endast en individuell cellformel:

1 Område ("a1"). Beräkna

Beräkna arbetsbok

Det finns inget VBA -alternativ för att bara beräkna en hel arbetsbok. Om du behöver beräkna en hel arbetsbok är det bästa alternativet att använda kommandot Beräkna:

1 Beräkna

Detta beräknar alla öppna arbetsböcker. Om du verkligen är orolig för hastigheten och vill beräkna en hel arbetsbok kan du vara mer selektiv om vilka arbetsböcker som är öppna samtidigt.

Beräkna arbetsbok - metoder som inte fungerar

Det finns ett par metoder som du kan frestas att använda för att tvinga VBA att beräkna bara en arbetsbok, men ingen av dem kommer att fungera korrekt.

Den här koden går igenom varje kalkylblad i arbetsboken och beräknar arken ett i taget:

1234567 Sub Recalculate_Workbook ()Dim ws Som arbetsbladFör varje ws i kalkylbladws.BeräknaNästa wsAvsluta Sub

Den här koden fungerar bra om alla dina kalkylblad är "fristående", vilket innebär att inget av dina blad innehåller beräkningar som refererar till andra blad.

Men om dina kalkylblad hänvisar till andra blad kanske dina beräkningar inte uppdateras korrekt. Till exempel, om du beräknar Sheet1 före Sheet2, men Sheet1s formler är beroende av beräkningar som görs i Sheet2, kommer dina formler inte att innehålla de mest uppdaterade värdena.

Du kan också försöka markera alla blad samtidigt och beräkna det aktiva bladet:

12 ThisWorkbook.Sheets.SelectActiveSheet.Calculate

Detta kommer dock att orsaka samma problem.

Du kommer att bidra till utvecklingen av webbplatsen, dela sidan med dina vänner

wave wave wave wave wave