{"id":55000339,"date":"2017-10-01T00:00:00","date_gmt":"2020-01-24T15:59:43","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=339"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Ereignisse_anderer_Objekte_nutzen_","status":"publish","type":"post","link":"https:\/\/access-basics.de\/index.php\/Ereignisse_anderer_Objekte_nutzen_.html","title":{"rendered":"Ereignisse anderer Objekte nutzen"},"content":{"rendered":"<p class='introduction'>Normalerweise implementieren Sie Ereignisse immer in dem Klassenmodul des Objekts, durch das sie ausgel&ouml;st werden. Beispiele sind &#8222;Beim Laden&#8220; oder &#8222;Beim Anzeigen&#8220; eines Formulars oder auch &#8222;Beim Klicken&#8220; einer Schaltfl&auml;che. Aber wussten Sie, dass Sie auch von anderen Klassenmodulen aus die Ereignisse von externen Objekten wie Formularen oder Steuerelementen implementieren k&ouml;nnen Dieser Artikel zeigt, wie das gelingt und welche Vorteile Sie dadurch erlangen.<\/p>\n<h2>Beispieldatenbank<\/h2>\n<p>Die Beispiele dieses Artikels finden Sie in der Datenbank <b>1611_EreignisseAndererObjekteNutzen.accdb<\/b>.<\/p>\n<h2>Fremde Ereignisse implementieren<\/h2>\n<p>Die grundlegende Technik zeigen wir an einem einfachen Beispiel. Dabei wollen wir ein Formular &ouml;ffnen, die Eingabe des Benutzers abwarten und dann vor demSchlie&szlig;en die eingegebenen Daten im aufrufenden Formular einlesen. &uuml;blicherweise w&uuml;rden Sie von einem Formular aus dazu die folgende Anweisung nutzen:<\/p>\n<pre>DoCmd.OpenForm \"frmQuelle\", WindowMode:=acDialog<\/pre>\n<p>Dies h&auml;lt den Code der aufrufenden Prozedur an. Sie w&uuml;rden das aufgerufene Formular dann beim Klick auf die Schaltfl&auml;che<b> OK <\/b>mit der folgenden Anweisung unsichtbar machen:<\/p>\n<pre>Me.Visible = <span style=\"color:blue;\">False<\/span><\/pre>\n<p>Die aufrufende Prozedur w&uuml;rde dies dann als Beenden des Dialog interpretieren, pr&uuml;fen, ob das Formular zwar unsichtbar, aber noch ge&ouml;ffnet ist, und die gew&uuml;nschten Daten auslesen, bevor sie das Formular endg&uuml;ltig schlie&szlig;t:<\/p>\n<pre>DoCmd.Close acForm, \"frmQuelle\"<\/pre>\n<p>Zu dieser Vorgehensweise gibt es eine elegante Alternative, die es nicht erfordert, das aufgerufene Formular erst noch unsichtbar zu schalten und dann im aufrufenden Formular zu pr&uuml;fen, ob dieses &uuml;berhaupt noch vorhanden ist.<\/p>\n<h2>Beispielformular<\/h2>\n<p>Wir wollen uns diese beiden Vorgehensweisen im Vergleich anschauen. Dazu legen wir ein Formular namens <b>frmZiel <\/b>an, welches zwei Schaltfl&auml;chen zum &ouml;ffnen zweier Formulare mit jeweils einer der beiden Methoden enth&auml;lt. Au&szlig;erdem besitzt dieses Formular zwei Textfelder, in welche die in die ge&ouml;ffneten Formulare eingegebenen Texte beim Schlie&szlig;en &uuml;bertragen werden sollen (siehe Bild 1).<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_339_001.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_339_001.png\" alt=\"Formular, das andere Formular aufruft und vor dem Schlie&szlig;en deren Werte einliest\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 1: Formular, das andere Formular aufruft und vor dem Schlie&szlig;en deren Werte einliest<\/p>\n<h2>Methode 1: &ouml;ffnen mit DoCmd.OpenForm<\/h2>\n<p>Die erste Schaltfl&auml;che namens <b>cmdOpenForm <\/b>verwendet die folgende Prozedur, um das Formular <b>frmQuelle1 <\/b>mit der <b>DoCmd.OpenForm<\/b>-Methode als modalen Dialog zu &ouml;ffnen:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdOpenForm_Click()\r\n    DoCmd.OpenForm \"frmQuelle1\", WindowMode:=acDialog\r\n    <span style=\"color:blue;\">If <\/span>IstFormularGeoeffnet(\"frmQuelle1\")<span style=\"color:blue;\"> Then<\/span>\r\n        Me!txtZiel1 = Forms!frmQuelle1!txtEingabe\r\n        DoCmd.Close acForm, \"frmQuelle1\"\r\n    <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Nach dem &ouml;ffnen gibt der Benutzer einen Text in das einzige Textfeld dieses Formulars ein und klickt auf die Schaltfl&auml;che <b>OK<\/b>, um das Formular wieder zu schlie&szlig;en. Dies l&auml;sst die aufrufende Prozedur weiterlaufen, die dann mit der Hilfsfunktion <b>IstFormularGeoeffnet <\/b>aus dem Modul <b>mdlTools <\/b>pr&uuml;ft, ob das ge&ouml;ffnete Formular &uuml;berhaupt noch ge&ouml;ffnet ist. Falls ja, wurde der modale Modus durch Setzen der Eigenschaft <b>Visible <\/b>auf den Wert <b>True <\/b>aufgehoben.<\/p>\n<p>In diesem Fall tr&auml;gt die erste Zeile innerhalb der <b>If&#8230;Then<\/b>-Bedingung den Wert des Textfeldes <b>txtEingabe <\/b>des Formulars <b>frmQuelle1 <\/b>in das Textfeld <b>txtZiel1 <\/b>des Formular <b>frmZiel <\/b>ein. Die zweite Anweisung schlie&szlig;t das noch ge&ouml;ffnete, aber unsichtbare Formular <b>frmQuelle <\/b>nun endg&uuml;ltig.<\/p>\n<p>Der Ablauf sieht so wie in Bild 2 aus. Die Schaltfl&auml;che <b>cmdOK <\/b>von <b>frmQuelle1 <\/b>l&ouml;st die folgende Ereignisprozedur aus:<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_339_002.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_339_002.png\" alt=\"Aufruf und &uuml;bergabe des Textes von Formular zu Formular\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 2: Aufruf und &uuml;bergabe des Textes von Formular zu Formular<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdOK_Click()\r\n    Me.Visible = <span style=\"color:blue;\">False<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<h2>Methode 2: &ouml;ffnen per New und Reaktion auf das Schlie&szlig;en per Implementierung von OnClose<\/h2>\n<p>Die zweite Methode ist &auml;hnlich aufgebaut, aber verwendet einen etwas anderen Code. Voraussetzung f&uuml;r das Funktionieren ist die Deklaration einer Variablen, mit dem wir das zu &ouml;ffnende Formular referenzieren k&ouml;nnen. Die Deklaration muss im Kopf des Klassenmoduls <b>Form_frmZiel <\/b>erfolgen, damit die Variable nach dem Initialisieren immer noch verf&uuml;gbar ist. Zus&auml;tzlich ben&ouml;tigen wir ein spezielles Schl&uuml;sselwort, n&auml;mlich <b>WithEvents<\/b> &#8211; mehr dazu gleich:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>WithEvents frm<span style=\"color:blue;\"> As <\/span>Form<\/pre>\n<p>Die zweite Schaltfl&auml;che namens <b>cmdNewInstance <\/b>l&ouml;st nun beim Anklicken die folgende Ereignisprozedur aus:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdNewInstance_Click()\r\n    <span style=\"color:blue;\">Set<\/span> frm = <span style=\"color:blue;\">New<\/span> Form_frmQuelle2\r\n    <span style=\"color:blue;\">With<\/span> frm\r\n        .Modal = <span style=\"color:blue;\">True<\/span>\r\n        .Visible = <span style=\"color:blue;\">True<\/span>\r\n        .OnClose = \"[Event Procedure]\"\r\n    End <span style=\"color:blue;\">With<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Diese erstellt eine neue Instanz des Formulars <b>frmQuelle2<\/b>, wozu es das <b>New<\/b>-Schl&uuml;sselwort mit dem Klassenmodul dieses Formulars verwendet. Das Ergebnis landet in der Variablen <b>frm<\/b>. F&uuml;r diese legen wir nun die Eigenschaft <b>Modal <\/b>auf den Wert <b>True <\/b>fest, damit das Formular als modaler Dialog ge&ouml;ffnet wird. Mit <b>Visible = True <\/b>wird das noch unsichtbare Formular eingeblendet. Danach folgt eine Anweisung, die mit dem zuvor verwendeten Schl&uuml;sselwort <b>WithEvents<\/b> in Zusammenhang steht:<\/p>\n<pre>frm.OnClose = \"[Event Procedure]\"<\/pre>\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\/55000339\/\">\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\/55000339?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\/55000339\/\"\/>\n\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"8d63f6cbe9\"\/>\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>Normalerweise implementieren Sie Ereignisse immer in dem Klassenmodul des Objekts, durch das sie ausgel&ouml;st werden. Beispiele sind &#8222;Beim Laden&#8220; oder &#8222;Beim Anzeigen&#8220; eines Formulars oder auch &#8222;Beim Klicken&#8220; einer Schaltfl&auml;che. Aber wussten Sie, dass Sie auch von anderen Klassenmodulen aus die Ereignisse von externen Objekten wie Formularen oder Steuerelementen implementieren k&ouml;nnen Dieser Artikel zeigt, wie das gelingt und welche Vorteile Sie dadurch erlangen.<\/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":[66112016,662016,44000011],"tags":[],"class_list":["post-55000339","post","type-post","status-publish","format-standard","hentry","category-66112016","category-662016","category-VBAGrundlagen"],"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>Ereignisse anderer Objekte nutzen  - Access [basics]<\/title>\n<meta name=\"description\" content=\"Normalerweise implementieren Sie Ereignisse immer in dem Klassenmodul des Objekts, durch das sie ausgel\u00f6st werden. Beispiele sind \u00bbBeim Laden\u00ab oder \u00bbBeim Anzeigen\u00ab eines Formulars oder auch \u00bbBeim Klicken\u00ab einer Schaltfl\u00e4che. Aber wussten Sie, dass Sie auch von anderen Klassenmodulen aus die Ereignisse von externen Objekten wie Formularen oder Steuerelementen implementieren k\u00f6nnen? Dieser Artikel zeigt, wie das gelingt und welche Vorteile Sie dadurch erlangen.\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-basics.de\/index.php\/Ereignisse_anderer_Objekte_nutzen_.html\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ereignisse anderer Objekte nutzen  - Access [basics]\" \/>\n<meta property=\"og:description\" content=\"Normalerweise implementieren Sie Ereignisse immer in dem Klassenmodul des Objekts, durch das sie ausgel\u00f6st werden. Beispiele sind \u00bbBeim Laden\u00ab oder \u00bbBeim Anzeigen\u00ab eines Formulars oder auch \u00bbBeim Klicken\u00ab einer Schaltfl\u00e4che. Aber wussten Sie, dass Sie auch von anderen Klassenmodulen aus die Ereignisse von externen Objekten wie Formularen oder Steuerelementen implementieren k\u00f6nnen? Dieser Artikel zeigt, wie das gelingt und welche Vorteile Sie dadurch erlangen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-basics.de\/index.php\/Ereignisse_anderer_Objekte_nutzen_.html\" \/>\n<meta property=\"og:site_name\" content=\"Access [basics]\" \/>\n<meta property=\"article:published_time\" content=\"2020-01-24T15:59:43+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_339_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=\"11\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\/Ereignisse_anderer_Objekte_nutzen_.html#primaryimage\",\"inLanguage\":\"de\",\"url\":\"..\/tl_files\/images\/pic_339_001.png\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Ereignisse_anderer_Objekte_nutzen_.html#webpage\",\"url\":\"https:\/\/access-basics.de\/index.php\/Ereignisse_anderer_Objekte_nutzen_.html\",\"name\":\"Ereignisse anderer Objekte nutzen - Access [basics]\",\"isPartOf\":{\"@id\":\"https:\/\/access-basics.de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Ereignisse_anderer_Objekte_nutzen_.html#primaryimage\"},\"datePublished\":\"2020-01-24T15:59:43+00:00\",\"dateModified\":\"-0001-11-30T00:00:00+00:00\",\"author\":{\"@id\":\"https:\/\/access-basics.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f\"},\"description\":\"Normalerweise implementieren Sie Ereignisse immer in dem Klassenmodul des Objekts, durch das sie ausgel\\u00f6st werden. Beispiele sind \\u00bbBeim Laden\\u00ab oder \\u00bbBeim Anzeigen\\u00ab eines Formulars oder auch \\u00bbBeim Klicken\\u00ab einer Schaltfl\\u00e4che. Aber wussten Sie, dass Sie auch von anderen Klassenmodulen aus die Ereignisse von externen Objekten wie Formularen oder Steuerelementen implementieren k\\u00f6nnen? Dieser Artikel zeigt, wie das gelingt und welche Vorteile Sie dadurch erlangen.\",\"breadcrumb\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Ereignisse_anderer_Objekte_nutzen_.html#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/access-basics.de\/index.php\/Ereignisse_anderer_Objekte_nutzen_.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Ereignisse_anderer_Objekte_nutzen_.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\/Ereignisse_anderer_Objekte_nutzen_.html\",\"url\":\"https:\/\/access-basics.de\/index.php\/Ereignisse_anderer_Objekte_nutzen_.html\",\"name\":\"Ereignisse anderer Objekte nutzen\"}}]},{\"@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\/55000339","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=55000339"}],"version-history":[{"count":0,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000339\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/media?parent=55000339"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/categories?post=55000339"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/tags?post=55000339"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}