Autor: Peter Haserodt --- Aus Excel VBA - Gruppe:
TutorialsDAU versus DAP - oder Sorgfalt beim Programmieren
Autor: Peter Haserodt - Erstellt: -- - Letzte Revision: --
Man redet immer über den DAU (Dümmster anzunehmender User)
Aber was ist mit dem DAP
Es gibt absolut viele Horrorcodes bezüglich Eingriff in die Anwenderumgebung und ich schließe mich da persönlich nicht aus, dass ich soetwas aus Bequemlichkeit selbst produziere (produziert habe).
Immer gerne benutzt: Application.Calculation =xlCalculationManual
Ein in vielen Artikeln und Büchern und Foren beschriebener Weg, die Geschwindigkeit zu erhöhen, in dem man die Berechnung ausschaltet.
Durchaus ein möglicher Weg (obwohl man vorher nachdenken sollte, ob es nicht auch anders geht)
Die Standardempfehlung ist hier:
Sub IchMachMalWas()
Application.Calculation = xlCalculationManual
'Nun Irgendwelcher Code
Application.Calculation = xlCalculationAutomatic
End Sub
Welcher Teufel reitet mich denn hier?
Wer sagt mir denn, dass der Anwender die automatische Kalkulation haben will?
Vielleicht hat er doch ganz bewusst diese ausgeschaltet und jetzt schalte ich sie ihm einfach wieder ein und der weiß garnichts davon.
Da wäre ich als Anwender ganz schön sauer (wenn ich es mitkriege)
Warum merke ich mir nicht vorher, was da eingestellt war?
Sub IchMachMalWas()
Dim oldCalculation As Long
oldCalculation = Application.Calculation
Application.Calculation = xlCalculationManual
'Nun Irgendwelcher Code
Application.Calculation = oldCalculation
End Sub
Aber
Sie werden jetzt vielleicht ausführen:
Manchmal brauche ich, dass Excel jetzt rechnet, weil ich die Berechnung brauche, um weiter Aktionen durchzuführen.
Nun, haben Sie schon mal nachgeschaut, dass man für fast alles den Calculate Befehl direkt ausführen kann,
z.B. Range("B2").Calculate
Und ich gebe zu, so lange ist das mir auch noch nicht aufgefallen!
Aber mein ganzes Merken hilft noch nicht, denn kann ich wirklich garantieren...
Das mein Code sauber durchläuft?
Was ist denn, wenn ich die automatische Berechnung ausgeschaltet habe aber der Anwender diese haben wollte.
Und dummerweise fliegt mein Code ab?
(Und wer von sich behauptet, dass er ein garantiert fehlerfreien Code produziert, der soll sich patentieren lassen)
Das ganze Ding sollte eigentlich so lauten:
Sub IchMachMalWas()
Dim oldCalculation As Long
oldCalculation = Application.Calculation
On Error GoTo Fehler
Application.Calculation = xlCalculationManual
'Nun Irgendwelcher Code
Weiter:
Application.Calculation = oldCalculation
Exit Sub
Fehler:
Resume Weiter
End Sub
Gerade bei ...
z.B. Application.DisplayAlerts
kann fehlende Fehlerbehandlung für den Anwender zu ganz unerfreulichen Ergebnissen führen.
Oder auch SreenUpdating oder oder oder...
Zusammenfassung:
Wer einem Anwender etwas hinterlässt, was durch Code geändert wurde und nicht im Sinne des Anwenders durchgeführt wurde handel grob fahrlässig.
Jeder Zauberlehrling in Excel sollte sich darüber bewusst sein, dass er die Geister, die er auf einem fremden Rechner ruft, nicht mehr so einfach los wird.
Machen Sie nichts, von dem Sie nicht wissen, dass es Spuren hinterlässt, die der Anwender nicht will.
Seien Sie sorgfältig und glauben Sie niemals, dass etwas doch normale Einstellung ist.
Dem ist nicht so.
Hinterlassen Sie dem Anwender niemals veränderte Einstellungen!
Weitere Artikel der Gruppe: Tutorials Aus Excel VBA
Nach oben