Start Hilfe und Support Microsoft Office EXCEL 2010 VBA: Calculate-, CalculateFull- und CalculateFullRebuild-Methoden

EXCEL 2010 VBA: Calculate-, CalculateFull- und CalculateFullRebuild-Methoden

E-Mail PDF

Wo liegt der Unterschied in den VBA Calculate-Methoden in EXCEL 2010?

Auf die Suche nach Antworten geht man meist erst dann, wenn man kurz vor dem verzweifeln ist. Eigentlich war mein Problem in EXCEL ein ganz einfaches. Ich wollte, dass nach einer Eingabenänderung auf einem Arbeitsblatt (Worksheet) eine Neuberechnung durchgeführt wird, weil die Neueingabe von Werten eine Änderung der Ergebnisse bedingen. Die Ergebnisberechnung beruhte auf einer selbstgeschriebenen VBA-Funktion.

Zunächst habe ich die Einstellungen in EXCEL geprüft, weil ich davon ausgegangen war, dass vielleicht ein manuelles Berechnen in EXCEL eingestellt war. Diese lassen sich auf dem Menüband "Formeln" über den Button Berechnungsoptionen steuern. Wie vermutet stand die Einstellung auf "Automatisch".

berechnungsbuttons

Dann hat man aber auch die Möglichkeit, den Button "Neu berechnen" (gesamte Arbeitsmappe wird neu berechnet) oder "Blatt berechnen" (Arbeitsblatt wird neu berechnet) zu drücken. Aber beide Buttons führten nicht zu dem gewünschten Erfolg der Neuberechnung.

Also habe ich (so dachte ich) zu etwas härteren Mitteln gegriffen und folgenden VBA-Code für den Fall als Event (Reaktion auf ein Ereignis) hinterlegt, wenn man das Arbeitsblatt aktiviert (Worksheet_Activate), dass dann eine Neuberechnung durchgeführt wird. Das machte bei mir auch Sinn, weil die Eingabe, auf die die Neukalkulation reagieren sollte, auf einem anderen Arbeitsblatt erfolgte.

Private Sub Worksheet_Activate()

  wksAbrechnung.Calculate ' Den Namen wksAbrechnung habe ich für das Tabellenblatt (Worksheet) im Bereich Eigenschaften definiert
End Sub

Wäre dieses Vorgehen von Erfolg gekrönt gewesen, dann wäre dieser Artikel nicht entstanden. Eine Neuberechung der Ergebnisse wurden durch den Befehl Calculate nicht herbeigeführt. Das sind die Momente, wo man vor dem Rechner sitzt und nicht versteht, warum ein Befehl nicht das tut, was er besagt bzw. wie er heißt. Also habe ich gegooglet und nach etwas Suche bin ich dann darauf gestoßen, dass es Steigerungsformen von Calculate gibt, als da sind

  • Calculate (das kennen wir schon)
  • CalculateFull
  • CalculateFullRebuild

Microsoft beschreibt die Methoden in seiner Hilfe wie folgt:

Calculate

"Diese Methode berechnet alle geöffneten Arbeitsmappen, ein bestimmtes Arbeitsblatt einer Arbeitsmappe oder einen bestimmten Zellbereich in einem Arbeitsblatt."

Wie oben beschrieben, diese Methode reichte für mein Problem nicht aus, übrigens auch dann nicht, wenn man die stärkere Form des Application.Calculate anwendete...

CalculateFull

"Erzwingt eine vollständige Berechnung der Daten in allen geöffneten Arbeitsmappen."

Das habe ich dann mit der folgenden Methode ausprobiert:

Private Sub Worksheet_Activate()

  Application.CalculateFull ' Hinweis: Das Objekt Worksheet kennt die Methode CalculateFull nicht
End Sub

Dieses Vorgehen hat zum gewünschten Ergebnis der Neuberechnung geführt.

CalculateFullRebuild

"Erzwingt für alle geöffneten Arbeitsmappen eine vollständige Berechnung der Daten und erstellt die Abhängigkeiten erneut."

Anmerkungen

"Abhängigkeiten sind die Formeln, die von anderen Zellen abhängig sind. Die Formel "=A1" hängt z.B. von Zelle A1 ab. Die CalculateFullRebuild-Methode ist vergleichbar mit der erneuten Eingabe aller Formeln."

Diese Methode steht auch ausschließlich am Application-Objekt zur Verfügung. Da diese noch stärker wirkt, als die CalculateFull-Methode, funktionierte diese in meinem Fall dann auch.

Schlussbetrachtung

Offen gestanden hätte ich bereits bei der Methode Calulate erwartet, dass Ergebnisse auf dem Arbeitsblatt einfach neu berechnet werden. Das tut es aber nicht. Für mich macht die Methode Calculate eigentlich im Programmcode nur dann Sinn, wenn an der Oberfläche die automatische Berechnung ausgeschaltet worden ist; aber dann eben für das Arbeitsblatt bzw. die Arbeitsmappe vollständig, und das tut die Methode dann doch nicht...

CalculateFull weist jede Formel in allen geöffneten Arbeitsmappen an, sich neu zu berechnen. Das kann dann je nach Umfang der Arbeitsmappen eine Weile dauern. CalculateFullRebuild macht eigentlich das gleiche wie CalculateFull, tut aber so, als würden alle Funktionen und Formeln in den Zellen neu erfasst und die Verknüpfungen zwischen den Zellen neu hergestellt, insofern ist diese Methode die (zeit-)aufwändigste.


Zuletzt aktualisiert am Montag, den 04. November 2013 um 19:42 Uhr  


Machen Sie mit

Sie haben ein schönes Bild gemacht von Happerschoß, das auch andere interessieren könnte. Dann sollte es auf dieser Internetseite von Happerschoß erscheinen. Bitte melden Sie sich direkt über die Kontaktseite oder natürlich auch unter Info@happerschoss.net.