{"id":387,"date":"2008-12-20T17:26:26","date_gmt":"2008-12-20T16:26:26","guid":{"rendered":"http:\/\/blog.m-ri.de\/?p=387"},"modified":"2008-12-20T13:18:41","modified_gmt":"2008-12-20T12:18:41","slug":"loesung-was-ist-falsch-an-diesem-code-1","status":"publish","type":"post","link":"http:\/\/blog.m-ri.de\/index.php\/2008\/12\/20\/loesung-was-ist-falsch-an-diesem-code-1\/","title":{"rendered":"L\u00f6sung: Was ist falsch an diesem Code? (1)"},"content":{"rendered":"<p>Das Problem an diesem Code<\/p>\n<pre lang=\"vb\" line=\"1\">On Error Resume Next\r\nIf MyFunction() Then\r\n    MsgBox \"MyFunction succedded\"\r\nElse\r\n    MsgBox \"MyFunction failed\"\r\nEnd If\r\n\r\nMsgBox \"... continue execution ...\"\r\n\r\nFunction MyFunction\r\n    MsgBox \"Start MyFunction\"\r\n    On Error Goto 0\r\n    ' Just a failure here\r\n    i = 1\/0\r\n    MsgBox \"End MyFunction\"\r\n    Test = true\r\nEnd Function<\/pre>\n<p>ist, dass bei einem Fehler in der Funktion <em>MyFunction<\/em> die Funktion sofort abgebrochen wird. Nach diesem Fehler wird aber als n\u00e4chste Zeile der <em>Then <\/em>Block ausgef\u00fchrt. Die Funktion l\u00e4uft also in den Bock &#8222;MyFunction succeeded&#8220; was nicht unbedingt im Sinne des Erfinders w\u00e4re.<\/p>\n<p>Der Entwickler hat zwei Dinge nicht bedacht:<\/p>\n<ol>\n<li>Er wollte, das ein Fehler in <em>MyFunction <\/em>das Skript terminiert. Das erreicht er aber nicht. MyFunction wird bei einem Fehler abgebrochen, aber <em>On Error Resume Next<\/em> im n\u00e4chsten \u00e4u\u00dferen Scope behandelt den Fehler.<\/li>\n<li>Dem Entwickler war unklar, dass <em>On Error Resume Next <\/em>bei einem Fehler in einem <em>If <\/em>Statement zum Ausf\u00fchren des <em>Then <\/em>Blocks f\u00fchrt \u2757<br \/>\nUnd man kann sich Denken was passiert wenn man eine <em>While MyFunction() <\/em>Schleife hat? Jaaaaa genau! Wird in <em>MyFunction <\/em>ein Fehler ausgel\u00f6st hat man eine perfekte Endlosschleife!<\/li>\n<\/ol>\n<p>Am Besten also die Funktion nicht im If-Statement ausf\u00fchren sondern das Ergebnis in einer Variable Speichern. Sofern die Variable zuvor <em>empty<\/em> war, ist sie es im Falle ein Fehlers hinterher auch, d.h. sie wird nicht ver\u00e4ndert. Nach der Funktion kann man dann zus\u00e4tzlich auch <em>Err.Number <\/em>pr\u00fcfen.<\/p>\n<pre lang=\"vb\" line=\"1\">On Error Resume Next\r\nResult = MyFunction()\r\nIf Result Then\r\n    MsgBox \"MyFunction succedded\"\r\nElse\r\n    MsgBox \"MyFunction failed\"\r\nEnd If\r\n\r\nMsgBox \"... continue execution ...\"\r\n\r\nFunction MyFunction\r\n    MsgBox \"Start MyFunction\"\r\n    On Error Goto 0\r\n    ' Just a failure here\r\n    i = 1\/0\r\n    MsgBox \"End MyFunction\"\r\n    Test = true\r\nEnd Function<\/pre>\n<p lang=\"vb\">Und was lernen wir daraus \u2753<br \/>\n<em>On Error Resume Next <\/em>ist t\u00fcckisch und sollte m\u00f6glichst sofort zur\u00fcckgesetzt werden und schon gar nicht \u00fcber den Scope einer eigenen Funktion hinaus verwendet werden.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Das Problem an diesem Code On Error Resume Next If MyFunction() Then MsgBox &#8222;MyFunction succedded&#8220; Else MsgBox &#8222;MyFunction failed&#8220; End If MsgBox &#8222;&#8230; continue execution &#8230;&#8220; Function MyFunction MsgBox &#8222;Start MyFunction&#8220; On Error Goto 0 &#8218; Just a failure here i = 1\/0 MsgBox &#8222;End MyFunction&#8220; Test = true End Function ist, dass bei einem &hellip; <a href=\"http:\/\/blog.m-ri.de\/index.php\/2008\/12\/20\/loesung-was-ist-falsch-an-diesem-code-1\/\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eL\u00f6sung: Was ist falsch an diesem Code? (1)\u201c <\/span>weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1],"tags":[38,156],"class_list":["post-387","post","type-post","status-publish","format-standard","hentry","category-allgemein","tag-debuggen","tag-vbscript"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts\/387","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/comments?post=387"}],"version-history":[{"count":1,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts\/387\/revisions"}],"predecessor-version":[{"id":390,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts\/387\/revisions\/390"}],"wp:attachment":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/media?parent=387"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/categories?post=387"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/tags?post=387"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}