Hallo zusammen!
Gestern im Büro habe ich etwas reichlich Merkwürdiges mit Excel aus MS Office XP erlebt: Ich hatte eine Tabelle mit den Spalten A-F, benutzt waren die Zeilen von 1-30. In Spalte F stand jeweils die Formel =RUNDEN(Dn*En;0), wobei n für eine Zahl von 2-30 steht, je nach Zeilennummer. In D31 und F31 schließlich standen außerdem die Summen von Spalte D und F, in E31 der Quotient aus F31:D31.
Wie ich es jeden Tag mache, habe ich aus einer Access-Datenbank Daten in den Bereich von A1 bis E30 kopiert.
Erste Merkwürdigkeit: Sämtliche Formeln blieben auf den Ergebnissen des Vortags stehen - das konnte ja nun überhaupt nicht sein, dass alle Werte identisch waren, so einen großen Zufall gibt es nicht. Also habe ich als nächstes die Zellen von A1 bis E30 manuell gelöscht.
Zweite und noch viel größere Möglichkeit: obwohl die Tabelle nun leer war, mit Ausnahme der o.g. Formeln, zeigten diese immer noch die Ergebnisse des Vortags an, sowohl die 29 "RUNDEN"-Multiplikationen als auch die Summenformeln und der Quotient. Aktualisiert wurden die Zellen erst, nachdem ich mit der Maus in jede einzelne Zelle doppelgeklickt und wieder geentert hatte - jetzt stand alles auf 0 bzw. DIV/0.
Die dritte Merkwürdigkeit ahnt ihr sicher schon - nach dem Wiedereinkopieren der aktuellen Daten aus Access standen die Formeln nach wie vor auf 0 bzw. DIV/0 - ich musste erst wieder alles per Hand aktualisieren, d.h. Doppelklick auf den Zellinhalt und Enter, und dass bei allen Zellen mit hinterlegter Formel.
Was'n das? Einen solchen Schwachsinn habe ich noch nie erlebt. Kann sich jemand so etwas erklären? (Hoffentlich passiert jetzt nicht jeden Tag dieses Theater...).
THX
Olaf
Office - Word, Excel und Co. 9.703 Themen, 40.813 Beiträge
Es gibt leider VBA-Programmierer, die in ihren VBA-Skripten nicht etwa den aktuellen Status
von Application.Calculation speichern und nachher wieder restaurieren, sondern ihn schlicht weg entweder:
auf manuell setzen (Application.Calculation = xlCalculationManual) und dann auch nach Beenden ihrer Applikation so belassen oder den einfach willkürlich ändern - entweder auf manuell oder auf Application.Calculation = xlCalculationAutiomatic
Dabei gehört das so:
Sub IchMachMalWas()
Dim oldCalculation As Long
oldCalculation = Application.Calculation
Application.Calculation = xlCalculationManual
'Nun Irgendwelcher Code
Application.Calculation = oldCalculation
End Sub
wobei es bei größeren Applikationen vorteilhaft ist/sein kann, die ersten beiden Zeilen innerhalb der Sub in einem Modul so zu schreiben:
Public OldCalculation AS Long = Application.Calculation
durch die auslagerung in ein eigenständiges Modul wird OldCalculation nämlich zu einer globalen Variable, die Applikationsweit verfügbar ist.
Volker