{"id":55000076,"date":"2012-04-01T00:00:00","date_gmt":"2020-01-24T15:57:55","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=76"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Fehlerbehandlung_in_Formularen","status":"publish","type":"post","link":"https:\/\/access-basics.de\/index.php\/Fehlerbehandlung_in_Formularen.html","title":{"rendered":"Fehlerbehandlung in Formularen"},"content":{"rendered":"<p class='introduction'>In den Artikeln Fehler unter VBA und Fehlerbehandlung unter VBA (Teil I und II) haben Sie fast schon alles &uuml;ber Fehler und ihre Behandlung erfahren. Es gibt jedoch ein paar F&auml;lle, in denen zwar Fehlermeldungen erscheinen, Sie aber keine Chance haben, auf diese zu reagieren. Dies geschieht beispielsweise, wenn Sie per Formular einen Wert zwei Mal in ein Feld mit eindeutigem Index eingeben. In diesem Artikel erfahren Sie, wie Sie solche Fehler ebenfalls abfangen und eine eigene Fehlerbehandlung daf&uuml;r implementieren &#8211; gegebenenfalls auch mit benutzerdefinierter Fehlermeldung.<\/p>\n<h2>Beispieldatenbank<\/h2>\n<p>Die Beispiele dieses Artikels finden Sie in der Datenbank <b>11_08_FehlerbehandlungInFormularen.mdb<\/b>.<\/p>\n<h2>Benutzerdefinierte Fehlermeldungen<\/h2>\n<p>Nichts ist &auml;rgerlicher, als wenn der Benutzer einer Anwendung Fehlermeldungen angezeigt bekommt, die er nicht interpretieren kann, weil diese schlicht nicht aussagekr&auml;ftig genug ist. In solchen F&auml;llen sollten Sie immer eine benutzerdefinierte Meldung bereithalten und entsprechend auf den Fehler reagieren (gegebenenfalls gelingt dies ja auch, ohne dass der Benutzer &uuml;berhaupt eine Fehlermeldung zu Gesicht bekommt &#8230;). Wie Sie dies f&uuml;r Fehler durchf&uuml;hren, die durch VBA-Anweisungen in den Ereignisprozeduren ausgel&ouml;st werden, erfahren Sie unter <b>Fehlerbehandlung unter VBA <\/b>und <b>Fehlerbehandlung in der Praxis<\/b>.<\/p>\n<p>Die Fehler, von denen wir hier sprechen, sind in den meisten F&auml;llen keine Fehler, sondern lediglich Meldungen, die auf Verletzungen etwa der Datenintegrit&auml;t hinweisen &#8211; meist werden diese durch die Jet-Engine verursacht, die f&uuml;r den Zugriff und das Bearbeiten der in den Tabellen gespeicherten Daten verantwortlich ist. Beispiele hierf&uuml;r sind die folgenden:<\/p>\n<ul>\n<li>Eingabe eines Textes in ein Zahlenfeld,<\/li>\n<li>Speichern eines Datensatzes, der noch nicht gef&uuml;llte Pflichtfelder enth&auml;lt,<\/li>\n<li>G&uuml;ltigkeitsmeldungen oder<\/li>\n<li>Eingabe eines bereits vorhandenen Wertes in ein Feld, das als eindeutiges Feld indiziert ist.<\/li>\n<\/ul>\n<h2>Restriktionen durch den Datentyp<\/h2>\n<p>Das erste Beispiel zeigt die grundlegende Vorgehensweise beim Abfangen von Fehlern in Formularen, die nicht durch den Code selbst ausgel&ouml;st werden. Das Beispielformular hei&szlig;t <b>frmArtikel <\/b>und verwendet die Tabelle <b>tblArtikel <\/b>als Datenherkunft. Diese Tabelle enth&auml;lt beispielsweise ein Feld namens <b>Einzelpreis<\/b>, das den Datentyp <b>W&auml;hrung <\/b>aufweist. Dementsprechend darf der Benutzer nur Zahlenwerte eingeben. Wenn er hier etwa einen Text eingibt, weil er der Ansicht ist, man m&uuml;sste neben der Preisangabe noch die Zeichenkette <b>EURO <\/b>ausschreiben, l&ouml;st dies die Meldung aus Bild 1 aus.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_76_001.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_76_001.png\" alt=\"Dieser Meldung erscheint beim Eingeben von Text in numerische Felder.\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 1: Dieser Meldung erscheint beim Eingeben von Text in numerische Felder.<\/p>\n<p>Der Meldungstext ist eigentlich aussagekr&auml;ftig, aber wir k&ouml;nnen ihn dennoch durch eine eigene Meldung ersetzen. Dazu verwenden Sie eine spezielle Ereignisprozedur namens <b>Bei Fehler<\/b>, die nur bei Fehlern ausgel&ouml;st wird, die nichts mit dem Code des Formulars zu tun haben. Aktivieren Sie dazu in der Entwurfsansicht des Formulars das Eigenschaftsfensters und wechseln Sie zur Registerseite <b>Ereignis<\/b>. Dort finden Sie, sofern das Formular selbst aktiviert ist, den Eintrag <b>Bei Fehler<\/b>. W&auml;hlen Sie hier den Wert <b>[Ereignisprozedur] <\/b>aus (siehe Bild 2) und klicken Sie auf die Schaltfl&auml;che mit den drei Punkten. Es erscheint der VBA-Editor, der das Grundger&uuml;st der Prozedur zeigt, mit der Sie die oben erw&auml;hnten Fehler abgreifen k&ouml;nnen:<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_76_002.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_76_002.png\" alt=\"Anlegen der Ereignisprozedur, die bei Fehlern im Formular ausgel&ouml;st wird\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 2: Anlegen der Ereignisprozedur, die bei Fehlern im Formular ausgel&ouml;st wird<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Error(DataErr<span style=\"color:blue;\"> As Integer<\/span>, _\r\n                                Response<span style=\"color:blue;\"> As Integer<\/span>)\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Diese Ereignisprozedur besitzt zwei Parameter:<\/p>\n<ul>\n<li>Der erste hei&szlig;t <b>DataErr <\/b>und ist mit der Eigenschaft Number des <b>Err<\/b>-Objekts identisch &#8211; er liefert also die Nummer des Fehlers, durch den die <b>Form_Error<\/b>-Ereignisprozedur ausgel&ouml;st wurde. Durch diesen Parameter k&ouml;nnen Sie auf die unterschiedlichen Fehler entsprechend reagieren.<\/li>\n<li>Der zweite Parameter namens <b>Response <\/b>erwartet in dieser Prozedur einen von zwei Werten als R&uuml;ckgabewert: <b>acDataErrContinue <\/b>bedeutet, dass die normalerweise von Access an dieser Stelle angezeigte Meldung nicht erscheinen soll,  <b>acDataErrDisplay <\/b>legt fest, dass Access die Fehlermeldung wie gewohnt anzeigen soll.<\/li>\n<\/ul>\n<p>Der Standardwert f&uuml;r <b>Response<\/b> lautet <b>acDataErrDisplay<\/b>. Das bedeutet, dass ohne weiteres Zutun Ihrerseits nach dem Anlegen der Ereignisprozedur einfach nur wie &uuml;blich die Access-Meldung erscheint. Soll dies nicht geschehen, stellen Sie <b>Response <\/b>auf den Wert <b>acDataErrContinue <\/b>ein:<\/p>\n<pre>Response = acDataErrContinue<\/pre>\n<p>Dadurch wird nun die Fehlermeldung unterdr&uuml;ckt. Der Benutzer kann das Feld aber nicht verlassen, ohne einen g&uuml;ltigen Wert einzugeben. Die folgende Anweisung teilt ihm dies mit:<\/p>\n<pre><span style=\"color:blue;\">MsgBox<\/span> \"Bitte geben Sie einen \" _\r\n    & \"Zahlenwert als Einzelpreis ein.\"<\/pre>\n<p>Dadurch wird nun eine entsprechende Meldung angezeigt. Den offensichtlich ung&uuml;ltigen Wert k&ouml;nnten Sie mit folgender Anweisung l&ouml;schen:<\/p>\n<pre>Me!Einzelpreis.Undo<\/pre>\n<p>Fertig &#8211; wenn der Benutzer nun einen ung&uuml;ltigen Wert f&uuml;r das Feld <b>Einzelpreis <\/b>eingibt, erscheint eine benutzerdefinierte Meldung. Die eigentliche Meldung unterbleibt und das Feld wird zur&uuml;ckgesetzt.<\/p>\n<h2>Fehler differenzieren<\/h2>\n<p>Fast perfekt, oder Nein, nicht ganz: Was geschieht denn, wenn ein anderer Fehler auftritt &#8211; beispielsweise beim Versuch, den Datensatz zu speichern, ohne das Pflichtfeld <b>Artikelname <\/b>zu f&uuml;llen Ganz einfach: Es erscheint genau die gleiche Fehlermeldung wie beim Eingeben eines Textes in das W&auml;hrungsfeld <b>Einzelpreis<\/b>. Eigentlich sollte aber die Meldung erscheinen, die in Bild 3 abgebildet ist.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_76_003.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_76_003.png\" alt=\"Fehlermeldung beim Speichern eines Datensatzes mit leeren Pflichtfeldern\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 3: Fehlermeldung beim Speichern eines Datensatzes mit leeren Pflichtfeldern<\/p>\n<p>Moment &#8211; war da nicht was mit dem ersten Parameter <b>DataErr<\/b> Der liefert doch f&uuml;r jeden Fehler eine entsprechende Fehlernummer! Also bauen wir diesen in die Ereignisprozedur <b>Form_Error <\/b>ein, um die jeweilige Fehlermeldung zu ermitteln.<\/p>\n<div class=\"rcp_restricted\"><p><span style=\"color: #ff0000;\">M&ouml;chten Sie weiterlesen? Dann l&ouml;sen Sie Ihr Ticket!<\/span><br \/>\n<span style=\"color: #ff0000;\">Hier geht es zur Bestellung des Jahresabonnements des Magazins <strong>Access &#091;basics&#093;<\/strong>:<\/span><br \/>\n<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/shop.minhorst.com\/magazine\/282\/access-basics?c=77\">Zur Bestellung ...<\/a><\/span><br \/>\n<span style=\"color: #ff0000;\">Danach greifen Sie sofort auf <strong>alle rund 400 Artikel<\/strong> unseres Angebots zu - auch auf diesen hier!<\/span><br \/>\n<span style=\"color: #000000;\">Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:<\/span><\/p>\n<\/div>\n\n\t\n\t<form id=\"rcp_login_form\"  class=\"rcp_form\" method=\"POST\" action=\"https:\/\/access-basics.de\/data\/wp\/v2\/posts\/55000076\/\">\n\n\t\t\n\t\t<fieldset class=\"rcp_login_data\">\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_login\">Username or Email<\/label>\n\t\t\t\t<input name=\"rcp_user_login\" id=\"rcp_user_login\" class=\"required\" type=\"text\"\/>\n\t\t\t<\/p>\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_pass\">Password<\/label>\n\t\t\t\t<input name=\"rcp_user_pass\" id=\"rcp_user_pass\" class=\"required\" type=\"password\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t\t<p>\n\t\t\t\t<input type=\"checkbox\" name=\"rcp_user_remember\" id=\"rcp_user_remember\" value=\"1\"\/>\n\t\t\t\t<label for=\"rcp_user_remember\">Remember me<\/label>\n\t\t\t<\/p>\n\t\t\t<p class=\"rcp_lost_password\"><a href=\"\/index.php\/data\/wp\/v2\/posts\/55000076?rcp_action=lostpassword\"><\/a><\/p>\n\t\t\t<p>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_action\" value=\"login\"\/>\n\t\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/access-basics.de\/data\/wp\/v2\/posts\/55000076\/\"\/>\n\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"771f142a70\"\/>\n\t\t\t\t<input id=\"rcp_login_submit\" class=\"rcp-button\" type=\"submit\" value=\"Login\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t<\/fieldset>\n\n\t\t\n\t<\/form>\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In den Artikeln Fehler unter VBA und Fehlerbehandlung unter VBA (Teil I und II) haben Sie fast schon alles &uuml;ber Fehler und ihre Behandlung erfahren. Es gibt jedoch ein paar F&auml;lle, in denen zwar Fehlermeldungen erscheinen, Sie aber keine Chance haben, auf diese zu reagieren. Dies geschieht beispielsweise, wenn Sie per Formular einen Wert zwei Mal in ein Feld mit eindeutigem Index eingeben. In diesem Artikel erfahren Sie, wie Sie solche Fehler ebenfalls abfangen und eine eigene Fehlerbehandlung daf&uuml;r implementieren &#8211; gegebenenfalls auch mit benutzerdefinierter Fehlermeldung.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662011,66082011,44000010],"tags":[],"class_list":["post-55000076","post","type-post","status-publish","format-standard","hentry","category-662011","category-66082011","category-Formulare_mit_VBA_programmieren"],"aioseo_notices":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v15.9.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Fehlerbehandlung in Formularen - Access [basics]<\/title>\n<meta name=\"description\" content=\"In den Artikeln Fehler unter VBA und Fehlerbehandlung unter VBA (Teil I und II) haben Sie fast schon alles \u00fcber Fehler und ihre Behandlung erfahren. Es gibt jedoch ein paar F\u00e4lle, in denen zwar Fehlermeldungen erscheinen, Sie aber keine Chance haben, auf diese zu reagieren. Dies geschieht beispielsweise, wenn Sie per Formular einen Wert zwei Mal in ein Feld mit eindeutigem Index eingeben. In diesem Artikel erfahren Sie, wie Sie solche Fehler ebenfalls abfangen und eine eigene Fehlerbehandlung daf\u00fcr implementieren \u2013 gegebenenfalls auch mit benutzerdefinierter Fehlermeldung.\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-basics.de\/index.php\/Fehlerbehandlung_in_Formularen.html\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Fehlerbehandlung in Formularen - Access [basics]\" \/>\n<meta property=\"og:description\" content=\"In den Artikeln Fehler unter VBA und Fehlerbehandlung unter VBA (Teil I und II) haben Sie fast schon alles \u00fcber Fehler und ihre Behandlung erfahren. Es gibt jedoch ein paar F\u00e4lle, in denen zwar Fehlermeldungen erscheinen, Sie aber keine Chance haben, auf diese zu reagieren. Dies geschieht beispielsweise, wenn Sie per Formular einen Wert zwei Mal in ein Feld mit eindeutigem Index eingeben. In diesem Artikel erfahren Sie, wie Sie solche Fehler ebenfalls abfangen und eine eigene Fehlerbehandlung daf\u00fcr implementieren \u2013 gegebenenfalls auch mit benutzerdefinierter Fehlermeldung.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-basics.de\/index.php\/Fehlerbehandlung_in_Formularen.html\" \/>\n<meta property=\"og:site_name\" content=\"Access [basics]\" \/>\n<meta property=\"article:published_time\" content=\"2020-01-24T15:57:55+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"-0001-11-30T00:00:00+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/..\/tl_files\/images\/pic_76_001.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Gesch\u00e4tzte Lesezeit\">\n\t<meta name=\"twitter:data1\" content=\"12\u00a0Minuten\">\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"https:\/\/access-basics.de\/#website\",\"url\":\"https:\/\/access-basics.de\/\",\"name\":\"Access [basics]\",\"description\":\"DAS ACCESS-MAGAZIN F\\u00dcR ALLE, DIE VON 0 AUF 100 WOLLEN\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"https:\/\/access-basics.de\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"de\"},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Fehlerbehandlung_in_Formularen.html#primaryimage\",\"inLanguage\":\"de\",\"url\":\"..\/tl_files\/images\/pic_76_001.png\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Fehlerbehandlung_in_Formularen.html#webpage\",\"url\":\"https:\/\/access-basics.de\/index.php\/Fehlerbehandlung_in_Formularen.html\",\"name\":\"Fehlerbehandlung in Formularen - Access [basics]\",\"isPartOf\":{\"@id\":\"https:\/\/access-basics.de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Fehlerbehandlung_in_Formularen.html#primaryimage\"},\"datePublished\":\"2020-01-24T15:57:55+00:00\",\"dateModified\":\"-0001-11-30T00:00:00+00:00\",\"author\":{\"@id\":\"https:\/\/access-basics.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f\"},\"description\":\"In den Artikeln Fehler unter VBA und Fehlerbehandlung unter VBA (Teil I und II) haben Sie fast schon alles \\u00fcber Fehler und ihre Behandlung erfahren. Es gibt jedoch ein paar F\\u00e4lle, in denen zwar Fehlermeldungen erscheinen, Sie aber keine Chance haben, auf diese zu reagieren. Dies geschieht beispielsweise, wenn Sie per Formular einen Wert zwei Mal in ein Feld mit eindeutigem Index eingeben. In diesem Artikel erfahren Sie, wie Sie solche Fehler ebenfalls abfangen und eine eigene Fehlerbehandlung daf\\u00fcr implementieren \\u2013 gegebenenfalls auch mit benutzerdefinierter Fehlermeldung.\",\"breadcrumb\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Fehlerbehandlung_in_Formularen.html#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/access-basics.de\/index.php\/Fehlerbehandlung_in_Formularen.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Fehlerbehandlung_in_Formularen.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/\",\"url\":\"https:\/\/access-basics.de\/\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"position\":2,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Fehlerbehandlung_in_Formularen.html\",\"url\":\"https:\/\/access-basics.de\/index.php\/Fehlerbehandlung_in_Formularen.html\",\"name\":\"Fehlerbehandlung in Formularen\"}}]},{\"@type\":\"Person\",\"@id\":\"https:\/\/access-basics.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/access-basics.de\/#personlogo\",\"inLanguage\":\"de\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","_links":{"self":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000076","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/comments?post=55000076"}],"version-history":[{"count":0,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000076\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/media?parent=55000076"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/categories?post=55000076"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/tags?post=55000076"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}