Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

Excel 2016 VBA für Profis

Fehler melden und beheben

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Excel-VBA hat eine besondere Art, mit Fehlern umzugehen. Sie müssen vorher ankündigen, was im Falle eines auftretenden Fehlers passieren und an welcher Stelle der Code dann weiterlaufen soll.

Transkript

Dieser Code kann jetzt also Laufzeitfehler bei Bedarf erzeugen. Und mit denen muss ich umgehen. Wenn ich Fehler bearbeiten möchte, dann muss ich erstmal die Macht über die Fehlerbehandlung gewinnen. Normalerweise, wenn ich jetzt hier mit "F5" laufen lasse und einen Fehler erzeuge, sagen wir, eine zu große Variable oder den zu großen Inhalt einer Variablen, dann kommt dieses Dialogfeld und Visual Basic selber geht noch mit dem Fehler um. Das hat für mich z. B. den Vorteil, dass ich diesen "Debug"-Button noch habe und es hier stoppen kann. Das wird sich jetzt ändern. Ich kann alles machen, was ich will, aber ich kriege leider diesen "Debug"-Button nicht, aber ich werde es ja auch selbst behandeln. Und bevor ich auf einen Fehler reagieren kann, muss ich ankündigen, dass ich jetzt die Macht über die Fehlerbehandlung übernehmen will. Der Befehl dazu tut einem in den Fingern weh. Sie befinden sich jetzt hier in der, Steinzeit ist noch freundlich gesagt, es ist eigentlich frühe Dinosaurier-Zeit der Programmierung, es kommt ein "GoTo". Ein "GoTo" ist ein Pfui unter Programmierern, das macht man nicht. Das erzeugt sogen. Spaghetti-Code, der von vorne nach hinten, von rechts nach links und wieder zurück und dreimal unten durch, unverfolgbar, unverstehbar ist, aber die Fehlerbehandlung arbeitet genau so. Ich muss also ankündigen, "On Error", falls ein Fehler auftritt, "GoTo" und dann denke ich mir jetzt irgendein Wort aus. Ich sage mal einfach, hier taucht ein "ZaehlerFehler" auf. Und dieses Wort muss es irgendwo, das ist typischerweise ganz am Ende des Codes, dieses Wort muss es irgendwo geben und zwar mit einem Doppelpunkt. Wenn Sie die Zeile verlassen, wird das automatisch nach vorne geholt. Das ist ein sogen. Label. Wer die frühen Basic-Dialekte kennt, der weiß, ursprünglich stand vor jeder Zeile eine Zahl und das ist sozusagen die -- das Wort "modern" will ich jetzt hier nicht benutzen -- die etwas weniger urtümliche Fassung, also statt der Zahl steht hier ein Text. Wenn also ein Fehler auftritt, egal in welcher dieser Zeilen, dann springt der Code dahinter. Und da werde ich erstmal nichts anderes machen als zu dokumentieren, was gerade passiert ist. Also eine Message-Box, die sagt: "Der Fehler Nummer soundso ist aufgetreten". Und den letzten Fehler kann ich immer in dem "Error Objekt" abfragen. Das schreibt sich aber nicht "Error", sondern nur diese Kurzfassung. Und dort gibt es eine Number. Und damit ich auch sehe, was da inhaltlich gemeint ist, rufe ich ebenfalls die "err.Description" auf und sage dann zusätzlich "vbCritical", ein Fehler und meine Konstante, damit keiner denkt, das sei von Excel verursacht. Ich werde also hier im Grunde erstmal nichts anderes machen als der Dialog eben, ich zeige den Fehler an. Und jetzt mit "F5" mache ich direkt einen Fehler. Das wird ein Überlauf. Und jetzt nach dem "OK" springt er in meine Message-Box, nennt mir Nummer und Text. Und nach dem "OK" ist es soweit in Ordnung. Ich kann also selber jetzt mit dem Fehler umgehen. Erste Überraschung, ich starte das nochmal, ich muss auch darauf achten, ob ein Fehler stattfindet. Ich teile mal die 12 durch die 5 und wie Sie sehen, taucht ein Fehler auf, obwohl alles in Ordnung ist. Und der Fehler hat die Nummer 0 und keine Beschreibung. Die Division hat stattgefunden. Es ist also alles wunderbar durchgelaufen, aber diese Labels sind nicht abweisend. Das bedeutet, wenn der Code hier angekommen ist, geht er da brav weiter und in die Message-Box. Deswegen Fehler Nummer 0. Ich muss auf jeden Fall eine Bremse einbauen, die heißt "Exit Sub". Wenn der Code normal an diese Zeile kommt, endet die Prozedur. Nur wenn er im Fehler irgendwo rüberspringt, dann landet er hier. Also mit "F5", jetzt kann ich fehlerfrei die 12 durch 5 teilen und alles in Ordnung. Und da unten erscheint das Ergebnis. Wenn ein Fehler in dieser Zeile auftaucht, dann wird hier durch dieses Label in diese Zeile gesprungen. Und im Grunde ist es dann vorbei. Sie machen sich bei Ihren Benutzern sehr viel beliebter, wenn Sie Ihnen die Chance lassen, den Fehler zu verbessern. Also an dieser Stelle einfach einen zweiten Befehl dranhängen, der heißt ganz schlicht "Resume"; sagt nichts anderes als die Zeile, in der der Fehler aufgetreten ist, springe ich nochmal an. Wenn also hier ein Fehler auftritt, kommt die Meldung und mit "Resume" springt er wieder hierhin. Mit "F5" lasse ich im Zähler einen Überlauf-Fehler auftreten, erhalte meine Meldung und kriege jetzt wieder die Zähler-Frage. Da kann ich es jetzt also richtig machen und in irgendeiner Form heil rauskommen. Wenn das im Nenner passiert, kann das schon lästiger sein. Ich gebe jetzt im Nenner einen Fehler ein, das kommt jetzt auf den Fehler an, mit "F5". Der Zähler ist harmlos, 1-2-3 oder 123. Der Nenner ist jetzt 0. Das führt nicht sofort zu einem Fehler, sondern erst in der Folgezeile, nämlich Division durch 0 wird mir wunderbar angezeigt, aber nach dem "OK" kommt diese Meldung leider immer wieder. Da komme ich jetzt nicht raus. Sie müssen "Strg+Pause", irgendwo oben rechts auf der Tastatur, da könnte auch "Unterbrechen" stehen, drücken, um jetzt die Fehlerbehandlung auszuhebeln und hier beenden zu können. Dort ist nämlich tatsächlich in den Nenner die Zahl 0 geschrieben worden, alles wunderbar, und der Fehler taucht hier auf. Und dann wird diese Zeile wiederholt und immer wiederholt und immer wiederholt. Ich muss also die Fehler unterscheiden. Die Zähler-Fehler kann ich so lassen. Jetzt erfinde ich einen Nenner-Fehler, also da kann ich hier ganz viel kopieren. Nenner-Fehler, das schreibe ich dann auch mal direkt dazu, "Zähler-Fehler" und "Nenner-Fehler", der Rest kann ruhig so bleiben. Und im Falle des Nenner-Fehlers, nämlich wenn hier eine Division, oder genauer gesagt, müsste ich die Division nochmal nennen, wenn die Division auftaucht, dann machen wir direkt eine dritte Fehlermeldung, dann möchte ich woanders hinspringen, also Divisions-Fehler. Und die muss ich jetzt entsprechend hier ankündigen. In diesem Fall kommt der Nenner-Fehler und hier folgt der Divisions-Fehler. Wenn der Divisions-Fehler auftaucht, d. h. in dieser Zeile, das ist dann eine Division durch 0, das ist ja erst hier fehlerhaft, dann will ich auf keinen Fall in diese Zeile wieder reinspringen, das wäre ja die Wiederholung, sondern ich will dorthin springen, wo der Nenner geändert werden kann. Ich muss also hier ein Label erfinden, sagen wir "NeuerNenner:". Achtung, das Label selbst hat immer einen Doppelpunkt. Und dann darf ich hier schreiben, "Resume NeuerNenner", da ist es ohne Doppelpunkt. Wenn ich das also verfolge, ich schalte auf Zähler-Fehler, Zähler ist okay. Ich schalte auf Nenner-Fehler, Nenner ist okay. Ich schalte auf Divisions-Fehler, der Nenner war eine 0, jetzt taucht ein Fehler auf. Dann springt er hierhin, meldet mir das, und springt dann freundlicherweise zurück nach hier oben und erlaubt die Eingabe des Nenners. Ich muss also und werde auch typischerweise an eine andere Stelle springen, als ich so im laufenden Betrieb den Fehler habe. Das einmal starten, erstmal den Zähler-Fehler prüfen, Zähler-Fehlerüberlauf, "OK" und ich darf es nochmal eingeben. Jetzt kommt ein gültiger Zähler. Jetzt kommt ein Nenner-Fehler. Machen wir da wieder einen Überlauf. Der meldet den Nenner-Fehler und ich darf den Nenner wieder eingeben. Jetzt gebe ich einen gültigen Nenner ein. Aus Sicht einer Integer-Variablen ist der gültig. Jetzt kommt aber der Divisions-Fehler. Und nach dem "OK" darf ich den Nenner erneut eingeben, irgendeine beliebige Zahl, und nach dem "OK" bin ich endlich heil raus sozusagen. So sieht die offizielle Fehlerbehandlung aus. Bevor ein Fehler auftritt, kündigen Sie an, was passiert. Dann müssen Sie ihn bearbeiten und am Ende steht dann entweder "Resume" oder "Resume irgendwas". Oder da kann auch ein "Exit Sub" oder so was in der Richtung stehen, Sie müssen es dann in irgendeiner Form abbrechen oder wieder wohin führen. Und wenn wir mal ganz grob zählen wollen, eine Zeile, zweite Zeile, drei Zeilen, das war das Originalprogramm. Und wenn ich jetzt hier unten hin klicke, kann ich da oben gucken, Zeile 27. Sagen wir mal, ab hier zählt, das ist Zeile 7. Wir haben also mal eben so aus drei Zeilen ungefähr 21 gemacht. Das ist eine Versiebenfachung des Codes. Und die Fehler sind, ehrlich gesagt, lächerlich. Da gibt es noch ganz andere Kaliber. Das ist die offizielle Version und ich sage ganz ehrlich, die macht keinen Spaß. Wenn Sie Ihren gesamten Code zur Hand haben wollen, und da gibt es noch eine Menge Sauereien, die im Hintergrund passieren, was ist mit Fehlern, die in einem Unterprogramm passieren, aber nur im übergeordneten, aufrufenden Prozedur-Teil korrigiert werden könnten und so was. Da kommen Sie von einem Problem ins nächste. Wir müssen uns also was anderes ausdenken, wie das zu beheben ist.

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:
Software:
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!