Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

Excel 2013 VBA für Profis

Fehler provozieren

Testen Sie unsere 2016 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Laufzeitfehler treten meistens dann auf, wenn man nicht damit rechnet. Das ist aber zu Demonstrations- und Testzwecken eher untauglich. Es braucht also eine Methode, solche Laufzeitfehler sicher provozieren zu können.

Transkript

Ich möchte einen Fehler machen. Das klingt jetzt vielleicht ein bisschen komisch, denn normalerweise bemüht man sich ja genau andersrum, keine Fehler zu machen. Aber wenn ich Ihnen zeigen will, wie Sie mit Fehlern umgehen, wie Sie die gut vermeiden können, oder wenn Sie auftreten, wie Sie verhindern können, dass sie größeren Schaden anrichten, dann ist es erstmal wichtig, Fehler zu kriegen. Und, so komisch das klingt, das ist gar nicht so einfach. Insbesondere wenn Sie Laufzeitfehler haben wollen, denn die treten ja gerade dann auf, wenn man es nicht erwartet. Sonst hätte man sie abfangen können. Ich möchte also hier erstmal dafür sorgen, dass überhaupt ein Fehler auftritt. In einer eigenen Prozedur Sub FehlerErzeugen. Genauer gesagt einen vom Typ Laufzeitfehler. Und da gibt es eigentlich so zwei Klassiker, mit denen man das machen kann. Der eine besteht in dem Versuch, eine Datei zu öffnen, die es nicht gibt, die gerade gesperrt ist, auf die Sie keine Leserechte haben oder irgendwie sowas. Das ist die eine Variante, die andere sind Datentyp- beziehungsweise Datengrößenverletzungen. Wenn Sie versuchen in eine Integer-Variable etwas reinzuspeichern, was größer als ungefähr 32.700 ist. Das muss scheitern, und zwar jedes Mal, wenn man es macht. Also werde ich jetzt von diesem Typ etwas machen, nämlich ein Problem mit Variablen, weil das einfach relativ schnell zu erzeugen ist. Ich brauche eine erste Variable intZaehler As Integer. Und eine zweite Variable Dim intNenner As Integer. Und Sie ahnen schon, da wird also ein Bruch vorkommen. Damit haben wir nämlich mit wenig Aufwand gleich ganz viele mögliche Laufzeitfehler. Damit es flexibel bleibt, werde ich diesen Variablen nicht direkt was zuweisen, sondern den Benutzer, auch wenn ich das selber bin, das eingeben lassen. Zum Beispiel intZaehler =. Da würde man mutwillig erstmal sowas schreiben: InputBox und dann nur den Prompt, also "Zähler?" als ganz kurzen, extrem kurzen Text benutzen. Das ist schon leichtsinnig bis fahrlässig. Die InputBox gibt einen String zurück. Und den versuchen Sie in eine Integer-Variable reinzuschreiben Das kann man schon zur Entwicklungszeit sehen, dass das nichts wird. Also wenn Sie sowas machen, dann bitte wenigstens eine anständige Val-Funktion drumrum. Das bedeutet nämlich, die Zeichenkette, die hier vom Benutzer oder von der InputBox zurückgeliefert wird, die wird immer in eine Zahl umgewandelt. Wenn Sie da "ABC" reinschreiben, dann wird die Zahl 0 sein. Aber es ist immer eine Zahl. Und das brauche ich sowohl für den Zähler als auch für den Nenner. Das heißt, ich kann das einfach runterkopieren und hier entsprechend anpassen. Auch da. Es ist wirklich alles nur die kürzeste Version, die es gibt. Und mit Debug.Print gebe ich anschließend das Ergebnis aus. Und das Ergebnis, ich setze das mal vorsichtshalber mal in Klammern. Das ist technisch nicht nötig, macht es aber vielleicht deutlicher. Also ich will nachher rechnen intZaehler/intNenner, Klammer wieder zu. Und dann lassen wir das; Ansicht Direktfenster speichern das Ganze, und ich beweise Ihnen erstmal, dass es fehlerfrei funktioniert. Einmal F5. Da ist die erste InputBox, fragt mich nach dem Zähler. Ich gebe mal eine 12 ein. OK. Da ist die zweite InputBox, fragt mich nach dem Nenner. Ich gebe mal eine 7 ein. Nach dem OK sehen Sie hier unten, das ist das Ergebnis. 12/7. Ist doch alles wunderbar. Wo ist denn der Fehler eigentlich? Genau. Und das ist das Problem von Laufzeitfehlern. Die treten nicht zuverlässig auf, sondern dann wenn man nicht damit rechnet. Sie können das jetzt mit 3 Millionen Zahlen durchprobieren und werden keinen Fehler entdecken. Aber ich kann das mit einer einzigen Zahl zu Fall bringen. Meine Zahl für den Zähler heißt: 123 Millionen 456 Tausend 789. Ist eine Zahl. Aber wenn ich jetzt auf OK gehe, gibt es einen Laufzeitfehler. Der ist recht kurz und knackig formuliert: Überlauf. Heißt auf Deutsch, diese Zahl ist zu groß. Und da kann ich jetzt mit Debuggen hinwechseln, kriege dann die Zeile markiert, die noch versucht wird auszuführen. Die InputBox ist schon gelaufen. Das Val wird auch funktionieren, kann ich Ihnen so weit versprechen. Aber hier, die Zuweisung an intZaehler ist gescheitert. Natürlich ist das klar. intZaehler ist eine Integer-Variable, steht hier oben, sagt mir auch Ungarische Notation da vorne. Und Integer erlaubt Zahlen von etwa -32000 bis +32000. So genau kommt es nicht drauf an. Wir sind nämlich mit 123 Millionen so deutlich darüber, dass es gar keiner Diskussion bedarf. Was können wir jetzt machen? Erstens können wir den Versuch, weiterzulaufen, sozusagen Anlauf nehmen und vor dem Sprung bremsen, diesen Versuch, weiterzulaufen im Code, erstmal unterbrechen. Das ist hier dieses Zurücksetzen. Das unterbricht auch solche Debugger-Stopps. Und als Zweites könnte ich natürlich hingehen und sagen, dann mache ich eben nicht int, 32000, sondern Double. Ungefähr 10^403 als Zahlenbereich. Das reicht. Aber das ist ja gerade nicht Sinn der Sache. Ich will jetzt nicht die Prozedur hier so weit verbessern, dass der Laufzeitfehler weg ist, sondern ich will sehen, was mache ich, wenn Laufzeitfehler auftreten und wie kann ich das ordentlich beheben? Und deswegen ist diese Prozedur so wichtig und so kurz, damit Sie sicher Laufzeitfehler erzeugt. Wenn ich nämlich entweder für den Zähler, oder, das funktioniert genauso, für den Nenner zu große Zahlen eingebe. Es gibt noch einen zweiten Fehler. Mit F5. Ich gebe mal eine Zahl ein, die passt: 123. Und nach dem OK, gebe ich auch nochmal eine Zahl ein, die passt, die 0. Liegt die 0 im Bereich zwischen +-32000? Ja, es ist eine Integer-Zahl. Und trotzdem gibt es natürlich nach dem OK einen zweiten Laufzeitfehler: Division durch 0. Weil ich hier versuche intZaehler, waren 123, hier intNenner, durch 0 zu teilen. Und das ist verboten. Kann ich also direkt hier beenden. Wir können also mit relativ wenig Code relativ viele Fehler erzeugen. Und das ist an dieser Stelle erstmal Sinn der Sache.

Excel 2013 VBA für Profis

Nutzen Sie die Möglichkeiten der Programmiersprache VBA in Excel 2013, um eigene Dialoge zu erstellen, auf andere Arbeitsmappen zuzugreifen und wichtige Funktionen einzusetzen.

4 Std. 59 min (53 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!