Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1064to1068
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Automatische Berechnung in Excel 2003

Automatische Berechnung in Excel 2003
03.04.2009 15:54:00
knickebein
Hallo,
wir migrieren aktuell unsere Excel-Templates von 98 auf 2003.
Dabei ist mir aufgefallen, dass in Excel 2003 VBA-Funktionen, die in Tabellenblättern Verwendung finden, ALLE bei JEDER Änderung (Werte, Formate) an IRGENDEINER Zelle neu berechnet werden.
Dies führt natürlich zu erheblichen Performanceproblemen - vor allem, wenn Zellformate per VBA-Schleifen (z.B. Sichtbarkeit) geändert werden. In Excel 98 erfolgte diese automatische Berechnung nur nach Änderung von ZELLINHALTEN.
Hat jemand eine Ahnung, weshalb dies der Fall ist und was man dagegen tun kann (außer die automatische Berechnung abzuschalten)?
Vielen Dank!
knickebein

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Automatische Berechnung in Excel 2003
03.04.2009 17:21:41
ransi
HAllo Knickebein
Dabei ist mir aufgefallen, dass in Excel 2003 VBA-Funktionen, die in Tabellenblättern Verwendung finden, ALLE bei JEDER Änderung (Werte, Formate) an IRGENDEINER Zelle neu berechnet werden.
Stimmt zumindest für Excel 2002 und Excel 2007 definitiev nicht.
Ganz einfach zu testen:
Diesen Code:
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit


Public Function test(zellen)
MsgBox "Ist berechnet"
test = "Irgendwas"
End Function

in dieser Tabelle:
Tabelle1

 ABCD
1Irgendwas  1
2   1
3   2
4    
5    
6    
7    
8    
9    
10    
11    
12    

Formeln der Tabelle
ZelleFormel
A1=test(B1:C10)
D3=SUMME(D1:D2)


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Änderst du etwas in dem gleben Bereich springt die Funktion an.
Änderst du irgenwo anders wird sie nicht aktualisiert.
Ich kann mir nicht vorstellen das das in Excel2003 anders ist...
ransi
Anzeige
Das ist schwer zu sagen, warum und wann...
03.04.2009 20:30:10
Luc:-?
...das so ist, Ransi,
aber Knickebeins Beobachtung kann durchaus "gefühlt" richtig sein. Das Objektmodell wurde ja inzwischen weiterentwickelt und ich musste schon bei xl9 feststellen, dass mehr neu berechnet wird als von mir erwartet. Natürlich hängt das auch vom Aufbau der udFktt - z.B. interne Verwendung weiterer ud- bzw xl-Fktt - ab. Außerdem scheinen Matrixfmln grdsätzlich neu berechnet zu wdn. Es kann also durchaus sein, dass bei hoher, aber evtl verborgener Komplexität sehr viel neu berechnet wird. Außerdem kann das ja auch mit an der Aufgabe - Konvertierung auf xl11 - liegen. Verfiziert wdn kann die Beobachtung also erst im normalen Betrieb! Unter xl12 wurde die Struktur nochmals effizienter gestaltet - außerdem dürfte das Hardwaretempo solcher Systeme höher sein -, so dass das nicht mehr so auffällt. Auch die Verwendung von Application.Volatile nutzt nicht viel, denn False ist ohnehin der Defaultwert.
Möglicherweise wirft VBA bei einem gewissen Grad von Komplexität das Handtuch und berechnet einfach alles. Ist wohl sensibler geworden... ;-)
Dazu hat Mr Online-xl mal 'ne Untersuchung durchgeführt - die Ergebnisse waren erschreckend...
Gruß Luc :-?
PS: Deine Bsp-Fkt ist sicher zu simpel, Ransi, um davon Allgemeingültiges ableiten zu können... Bei hoher Komplexität beobachte ich so etwas auf meinen Testblättern schon lange und schon unter xl9. Bei Automatik bei jedem Speichern auf allen Blättern irgendwas und sonst wenigstens Etliches auch scheinbar Unbeteiligtes auf dem aktuellen Blatt; idR aber wohl eher selten wirklich alles. Aber das Andere reicht ja schon... Vielleicht ist MS da ja was über den Kopf gewachsen... ;-)
Anzeige
AW: Präzisierung
06.04.2009 10:19:42
knickebein
Vielen Dank für die Unterstützung,
ich habe weiter geforscht und dabei herausgefunden, dass tatsächlich nicht IMMER alles aktualisiert wird.
In meinem Fall handelt es sich aber um die Änderung der Eigenschaft "Hidden", d.h. auf Knopfdruck werden alle mit einem Flag gekennzeichneten Zeilen ausgeblendet. Hierzu habe ich - da die Zeilen nicht zusammenhängen - eine Schleife verwendet. Bei jeder Änderung der Hidden-Eigenschaft werden dann aber tatsächlich ALLE Zellen (in diesem Fall sogar auf einem anderen Arbeitsblatt und ohne Bezug zu der ausgeblendeten Zeile) neu berechnet. Die hierfür erforderlichen ca. 5 Minuten sind schlicht indiskutabel.
Mittlerweile habe ich auch herausgefunden, dass dieses Problem der Hidden-Eigenschaft offenbar auch anderen bekannt ist und nicht elegant gelöst werden kann.
Mittels
Application.Calculation = xlCalculationManual
und
Application.Calculation = xlCalculationAutomatic
kann die automatische Berechnung aber wirksam temporär (für die Zeit des Zeilenausblendens) ausgeschaltet werden. Auf diese Weise erfolgt eine Beschleunigung auf ca. 0,5 Sekunden.
Gruß
knickebein
Anzeige
Ja, das ist die "Notbremse"... ;-) Gruß owT
08.04.2009 06:13:57
Luc:-?
:-?

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige