In deze zelfstudie leert u alle verschillende berekeningsopties in VBA.
Standaard berekent Excel alle geopende werkmappen telkens wanneer een werkmapwijziging wordt aangebracht. Het doet dit door een berekeningsboom te volgen waarbij als cel A1 wordt gewijzigd, het alle cellen bijwerkt die afhankelijk zijn van cel A1 enzovoort. Dit kan er echter voor zorgen dat uw VBA-code wordt uitgevoerd extreem langzaam, zoals elke keer dat een cel verandert, moet Excel opnieuw berekenen.
Om uw VBA-snelheid te verhogen, wilt u vaak automatische berekeningen aan het begin van uw procedures uitschakelen:
1 | Toepassing. Berekening = xlHandmatig |
en schakel het aan het einde opnieuw in:
1 | Toepassing.Berekening = xlAutomatisch |
Maar wat als u al uw werkboeken (of een deel ervan) wilt berekenen binnen uw procedure? De rest van deze tutorial leert je wat je moet doen.
Bereken nu
U kunt de opdracht Berekenen gebruiken om alles opnieuw te berekenen (in alle geopende werkmappen):
1 | Berekenen |
Dit is meestal de beste methode om te gebruiken. U kunt echter ook smallere berekeningen uitvoeren voor een betere snelheid.
Alleen blad berekenen
U kunt VBA ook vertellen om alleen een specifiek blad te berekenen.
Deze code berekent het actieve blad opnieuw:
1 | ActiveSheet.Berekenen |
Deze code berekent Blad1 opnieuw:
1 | Bladen ("Blad1"). Berekenen |
Bereken bereik
Als u een smallere berekening nodig heeft, kunt u VBA vragen om alleen een celbereik te berekenen:
1 | Spreadsheets ("Blad1"). Bereik ("a1:a10"). Berekenen |
Bereken individuele formule
Deze code berekent alleen een individuele celformule:
1 | Bereik ("a1"). Berekenen |
Bereken werkmap
Er is geen VBA-optie om alleen een hele werkmap te berekenen. Als u een hele werkmap moet berekenen, kunt u het beste de opdracht Berekenen gebruiken:
1 | Berekenen |
Hiermee worden alle geopende werkmappen berekend. Als u zich echt zorgen maakt over snelheid en een hele werkmap wilt berekenen, kunt u mogelijk selectiever zijn over welke werkmappen tegelijkertijd geopend zijn.
Bereken werkmap - Methoden die niet werken
Er zijn een aantal methoden die u in de verleiding zou kunnen brengen om VBA te dwingen alleen een werkmap te berekenen, maar geen van hen zal goed werken.
Deze code doorloopt elk werkblad in de werkmap en berekent de bladen één voor één opnieuw:
1234567 | Sub Recalculate_Workbook()Dim ws als werkbladVoor elke ws In werkbladenws.BerekenenVolgende wsEinde sub |
Deze code werkt prima als al uw werkbladen "op zichzelf staand" zijn, wat betekent dat geen van uw werkbladen berekeningen bevat die naar andere werkbladen verwijzen.
Als uw werkbladen echter naar andere bladen verwijzen, worden uw berekeningen mogelijk niet correct bijgewerkt. Als u bijvoorbeeld Blad1 vóór Blad2 berekent, maar de formules van Blad1 afhankelijk zijn van berekeningen die in Blad2 zijn gedaan, bevatten uw formules niet de meest actuele waarden.
U kunt ook proberen alle bladen tegelijk te selecteren en het actieve blad te berekenen:
12 | Dit Werkboek.Blad.SelecterenActiveSheet.Berekenen |
Dit zal echter hetzelfde probleem veroorzaken.