Excel 2016 VBA für Profis

Fehler provozieren

LinkedIn Learning kostenlos und unverbindlich testen!

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

Jetzt möchte ich mal Fehler machen. Das mag ein bisschen ungewohnt klingen, denn normalerweise möchte ich mir natürlich bemühen, keine Fehler zu machen, aber damit ich Ihnen zeigen kann, wie man mit Laufzeitfehlern umgeht, müssen sie erstmal auftauchen. Und das Schwierige bei denen ist, die tauchen überraschend auf. Sonst werden sie einfach zu beseitigen und die tauchen boshaft dann auf, wenn man es nicht gebrauchen kann. Jetzt kann ich es gebrauchen und werde also eine Prozedur schreiben, die nur dazu dient, Fehler, nämlich Laufzeitfehler zu erzeugen. Da gibt es eigentlich so zwei klassische Bereiche, in denen das passiert, der eine ist beim Öffnen von Dateien: "die Datei existiert nicht", "der Pfad existiert nicht", "das Laufwerk existiert nicht", "Sie haben keine Leserecht oder Schreibrecht oder beides" oder "die Datei fehlt überhaupt". Das ist ein bisschen lästig, ich könnte natürlich einfach jetzt eine nicht vorhandene Datei nehmen, aber bei der anderen Sorte von Laufzeitfehlern ist das einfacher, und die betreffen Variablen, Datengrößen, Datentypen und so was. Ich werde jetzt also eine Prozedur erzeugen, die heißt "sub Fehler erzeugen", die dient genau diesem Zweck, und die wird mit möglichst wenig Aufwand, möglichst viel Schaden anrichten sozusagen. Ich brauche zwei Zahle, das sind zwei Integer-Werte, also "intZähler As Integer" und Sie ahnen es schon "Dim intNenner As Integer", hier werde ich einfach die Zähler durch die Nenner rechnen, und das ist schon mein volles Programm. Damit es ein bisschen variabler ist, kann ich das von einem Benutzer eingeben lassen, der bin ich zwar selber, aber dann brauche ich nicht dauernd hier was ändern. Also mit der "InputBox" Klammer auf stelle ich ganz kurz die Frage "Wie heißt der Zähler", und damit man auch sieht, wie es verursacht, das es nicht mehr Excel-Meldung ist, noch die Konstante dahinter und soweit fertig. Der gute Programmierer sieht hier sofort, das kann überhaupt nicht wahr sein, die InputBox gibt einen Stream-Datentyp zurück, und Integer-Zähler ist hier wohl Integer-Datentyp. Basic wandelt eine Menge um, an unmöglichen Datentypen, die dann irgendwie passend gemacht werden. Da ist hier ein ziemliches Risiko, wenn man das denn schon so macht, dann sollte man einen Wert, Value drumherum setzen, was dafür sorgt, dass falls hier wirklich mal Texte auftauchen, die in einem Wert umgewandelt werden, und der ist schlechtestenfalls Null. Damit haben wir schon Teil der Fehlermöglichkeiten abgefangen. Fast das Gleiche gilt für den Nenner. Also wenn ich jetzt hier den Nenner aufnehme, dann entsprechend hier den Text ändern. Und ganz zum Schluss möchte ich mit "Debug.Print" ein Ergebnis oder sagen wir ruhig die Division davon anzeigen. Das ist also, ich mache das in Klammern, damit deutlicher ist, was da gerechnet wird, "intZähler" durch "intNenner". Das bedeutet wegen der Klammern dies hat Vorrang, das hätte es sowieso, aber dann ist es deutlicher, es wird hier gerechnet, dann wird das verkettet, und damit sind wir fertig. Es sind also faktisch 3 Zahlencode und die bieten eine Fülle an Fehlerquellen. Zuerst möchte ich Ihnen aber nachweisen, dass es funktioniert. Sonst wäre es hier einfach Fehlerhaften Code zu schreiben, nein, der ist nicht fehlerhaft, der funktioniert wunderbar. Ich gehe jetzt mit "F5" in die erste "InputBox", der fragt mich nach dem Wert für den Zähler, sagen wir 123 reicht, und nach dem "OK" kommt die Frage nach dem Nenner, sagen wir 75, also 123 durch 75, und nach dem "OK" sehen Sie unten, dass es 1,64. Wie Sie sehen, funktioniert wunderbar. Ich kann jetzt mehrere zigtausend Werte durchtesten, und Sie werden immer wieder feststellen, es klappt. Und trotzdem kann ich es mit einem ersten Wert schon zu Falle bringen, also ich starte es noch mal und beantworte jetzt die Frage nach dem Zähler, mit sagen wir 123456. Und nach dem "OK" gibt es direkt die erste Laufzeitfehlermeldung. Die ist hier extrem knapp formuliert, hier steht auch schon mal eine fünf- oder zwanzigzeiliger Text, meistens so eins-zwei Zeilen. Wichtig ist hier die Nummer, die sobald ist leicht, der Text ist landessprachlich, und er sagt jetzt hier ist eine Variable übergelaufen. Und wenn Sie diesen Dialog nicht ausschalten, kommen Sie mit Debugen in die Zeile, an der der Compiler gescheitert ist. Und zwar in dem Versuch hier den Wert, der hier ankommt, hier reinzuschreiben. Und wenn Sie sich erinnern, ich habe 1 2 3 4 5 6 geschrieben, das ist faktisch die Zahl 123456. Integer erlaubt aber nur 32000 und ein bisschen. Deswegen hier der Überlauf. Ich kann das also langfristig wiederholen aber Moment nur stoppen, und der gelbe Pfeil zeigt an, bevor diese Zeile ausgeführt wird, also der Fehler ist in dieser Zeile, kann ich mal merken. Und hier grundsätzlich das laufende Programm nicht nur zurücksetzen, sondern auch stoppen. Sonst ist es so ein bisschen, wie Anlauf genommen aber nicht losgesprungen, der würde gern. Also bevor Sie Fehler oder Code ändern, sollten Sie hier es mal stoppen. Jetzt bleibt natürlich die Frage, was mache ich. Die einfachste Lösung ist, ich mache hier aus dem Integer-Datentyp einfach den größtmöglichen Zahlendatentyp double und dann ist gut. Das würde das Problem tatsächlich beseitigen, dann sollte ich auch das Präfix hier ausbessern, aber ich will hier gerade mit wenig Aufwand Fehler zeigen. Und irgendwann werden Sie eine Zahl haben, die zu groß ist. Und es gibt noch ganz andere Fehler, die Sie so nicht beheben könnten. Ich lasse das noch mal laufen. Also 1 2 3 4, die Zahl 1234, ich könnte sogar 12345 nehmen. Überlegen ist die im Bereich 32700 Plus-Minus, ist so ungefähr Integer, also "OK". Der Nenner, sagen wir noch eine Zahl, die zwischen -32768 und +32767 liegt, das ist nämlich der Bereich. Hier nehmen wir doch mal eine Null. Nicht in dem Bereich, ja. Und nach dem "OK" gibt es trotzdem einen Laufzeitfehler, nämlich Division durch Null, weil hier, das sehen Sie jetzt bei Debugen, versucht wird, durch Null zu teilen. Das ist nicht zulässig. Sie können also noch so viele Datentypen und Grenzen erweitern. Die Null ist zumindestens im Nenner tödlich. Kann ich auch wieder stoppen. Und darum geht es hier letztenendes, mit möglichst wenig Aufwand bestimmte Fehler sicher erzeugen zu können, und die jetzt nicht mutwillig zu beseitigen, sondern zu gucken, was passiert, wenn solche Fehler auftreten, wie kann ich mit denen umgehen. Denn zum Beispiel das Fehlen einer Datei, die Sie jetzt öffnen wollen, das ist meistens nicht so eben zu beseitigen, dass Sie beschließen, die sind da, oder wenn geben Sie doch eine andere ein, wenn Sie genau die Datei brauchen, müssen Sie auf diesen Fehler reagieren können. Ich habe also mit wenig Aufwand die Möglichkeit, Laufzeitfehler zu erzeugen.

Excel 2016 VBA für Profis

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

5 Std. 52 min (55 Videos)
Derzeit sind keine Feedbacks vorhanden...
Hersteller:
Exklusiv für Abo-Kunden
Erscheinungsdatum:25.01.2017

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!