derzeit arbeite ich an der Entwicklung einer auf MS Excel basierenden Anwendung. Diese besteht aus (aktuell) 15 Arbeitsblättern, die jeweils mehrere Zeitreihen haben, die miteinander durch Formeln verknüpft sind. An mehreren Stellen setze ich WorksheetChange - Eventmanagement. Selbstverständlich schalte ich dabei ScreenUpdate aus und sorge dafür, dass keine Prozedur diese unerwartet einschaltet.
Seit einige Zeit werde ich immer öfter mit folgendem Problem konfrontiert:
Nach dem ersten Ausführen der Excel-Datei läuft alles glatt. Sobald ich aber etwas ändere (betätige Dropdown, ändere einige Werte in den Zeilen) "flackert" die Darstellung - ich bekomme Fragmente anderer Datenblätter angezeigt und öfters verschwinden diese Fragmente nicht und verdecken die tatsächlichen Daten. Erst beim hin und her Schalten zwischen den Blättern verschwinden die. Für mich sieht es aus, als würde der Bildschirm vom Excel nicht "aufgeräumt", sondern nur nach dem Wegschalten "Refresht" .
Das Debuggen hat komischerweise ergeben, dass dieses Phänomen VOR dem Ausführen der ersten Befehlszeile des WorksheetChange passiert. Ich bin durch diese Situation nun etwas überfordert. Zwar wird alles trotzdem richtig berechnet, einem Anwender solche graphische Fehler zumuten will ich nicht!
Hätte jemand ähnliche Erfahrungen gemacht und wenn ja, wie seid ihr damit klar gekommen?
wenn Du Application.ScreenUpdating = False setzt, wird der Bildschirm nicht mehr aktualisiert. Die Eigenschaft muss später auch wieder explizit eingeschaltet werden. Insofern wäre das Verhalten, dass die Anzeige nicht aktualisiert wird normal.
Falls Du das Event-Management temporär ausschalten möchtest, würde ich Application.EnableEvents = False verwenden, wobei auch dieses wieder explizit eingeschaltet werden muss.
wenn Du Application.ScreenUpdating = False setzt, wird der Bildschirm nicht mehr aktualisiert. Die Eigenschaft muss später auch wieder explizit eingeschaltet werden. Insofern wäre das Verhalten, dass die Anzeige nicht aktualisiert wird normal.
Falls Du das Event-Management temporär ausschalten möchtest, würde ich Application.EnableEvents = False verwenden, wobei auch dieses wieder explizit eingeschaltet werden muss.