Autor: Peter Haserodt  --- Aus Excel VBA - Gruppe: Tutorials

DAU 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 sm3 (1K)


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