{"id":55000362,"date":"2017-08-01T00:00:00","date_gmt":"2020-01-24T15:59:51","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=362"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Alle_Ereignisse_im_Hauptformular","status":"publish","type":"post","link":"https:\/\/access-basics.de\/index.php\/Alle_Ereignisse_im_Hauptformular.html","title":{"rendered":"Alle Ereignisse im Hauptformular"},"content":{"rendered":"<p class='introduction'>Wenn Sie mit Haupt- und Unterformularen arbeiten und Ereignisprozeduren sowohl in der Code behind-Klasse des Haupt- und des Unterformulars angelegt haben, kann es manchmal un&uuml;bersichtlich werden. Das ist vor allem dann der Fall, wenn Ereignisse im Unterformular sich auf die Abl&auml;ufe im Hauptformular auswirken. Dieser Artikel zeigt, wie Sie die Ereignisse, die durch ein Unterformular ausgel&ouml;st werden, im Klassenmodul des Hauptformulars implementieren. Damit k&ouml;nnen Sie Ereignisse, Objekte und Variablen in nur noch einem Modul nutzen.<\/p>\n<h2>Beispieldatenbank<\/h2>\n<p>Die Beispiele dieses Artikels finden Sie in der Datenbank <b>1704_EreignisseImHauptformular.accdb<\/b>.<\/p>\n<h2>Beispielkonfiguration<\/h2>\n<p>In unserem Beispiel wollen wir die Eintr&auml;ge einer Tabelle namens <b>tblArtikel <\/b>in einem Unterformular anzeigen. Das Hauptformular soll Steuer-elemente zum Hinzuf&uuml;gen eines neuen Artikels, zum L&ouml;schen eines Artikels oder zum Bearbeiten eines bestehenden Artikels enthalten. Dazu ist es aus Gr&uuml;nden der Ergonomie notwendig, dass die Schaltfl&auml;chen zum Anzeigen eines Datensatzes zum Bearbeiten und zum L&ouml;schen des aktuell markierten Datensatzes nur aktiviert sind, wenn der Benutzer auch einen Datensatz im Datenblatt markiert hat.<\/p>\n<p>Das Unterformular versehen wir daher mit der Tabelle <b>tblArtikel <\/b>als Datenherkunft und ziehen alle Felder dieser Tabelle aus der Feldliste in den Detailbereich des Entwurfs. Au&szlig;erdem stellen wir die Eigenschaft <b>Standardansicht <\/b>des Formulars auf <b>Datenblatt <\/b>ein (siehe Bild 1). Speichern Sie das Unterformular unter dem Namen <b>sfmArtikeluebersicht<\/b> und schlie&szlig;en Sie es. Dann legen Sie ein neues Formular namens <b>frmArtikeluebersicht <\/b>an und ziehen das Unterformular <b>sfmArtikeluebersicht <\/b>aus dem Navigationsbereich in den Detailbereich des neuen Formulars.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_362_001.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_362_001.png\" alt=\"Entwurf des Unterformulars mit der Datenblattansicht\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 1: Entwurf des Unterformulars mit der Datenblattansicht<\/p>\n<p>Au&szlig;erdem f&uuml;gen Sie noch drei Schaltfl&auml;chen namens <b>cmdNeu, cmdBearbeiten <\/b>und <b>cmdLoeschen<\/b> zu diesem Hauptformular hinzu. Ordnen Sie die Steuer-elemente wie in Bild 2 an und stellen Sie au&szlig;erdem die beiden Eigenschaften <b>Horizontaler Anker <\/b>und <b>Vertikaler Anker <\/b>des Unterformular-Steuerelements aus <b>Beide <\/b>ein. F&uuml;r die unter diesem Steuer-element befindlichen Schaltfl&auml;chen m&uuml;ssen Sie entsprechend <b>Horizontaler Anker <\/b>auf <b>Unten <\/b>einstellen, damit sich das Unterformular beim Vergr&ouml;&szlig;ern des Hauptformulars nicht &uuml;ber die Schaltfl&auml;chen legt.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_362_002.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_362_002.png\" alt=\"Haupt- und Unterformular in der Entwurfsansicht\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 2: Haupt- und Unterformular in der Entwurfsansicht<\/p>\n<p>Da das Hauptformular selbst keine Daten anzeigt, k&ouml;nnen Sie dessen Eigenschaften <b>Navigationsschaltfl&auml;chen<\/b>, <b>Datensatzmarkierer<\/b>, <b>Trennlinien <\/b>und <b>Bildlaufleisten <\/b>auf <b>Nein <\/b>einstellen sowie <b>Automatisch zentrieren <\/b>auf <b>Ja<\/b>.<\/p>\n<p>Nun wollen wir daf&uuml;r sorgen, dass die beiden Schaltfl&auml;chen cmdBearbeiten und cmdLoeschen deaktiviert werden, wenn der Datensatzzeiger im Unterformular nicht auf einen Datensatz zeigt &#8211; also beispielsweise der neue Datensatz markiert ist wie in Bild 3.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_362_003.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_362_003.png\" alt=\"Die beiden Schaltfl&auml;chen cmdBearbeiten und cmdLoeschen sollen deaktiviert sein, wenn im Unterformular kein Datensatz markiert ist.\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 3: Die beiden Schaltfl&auml;chen cmdBearbeiten und cmdLoeschen sollen deaktiviert sein, wenn im Unterformular kein Datensatz markiert ist.<\/p>\n<p>Klassisch erledigen wir das wie folgt: Wir nutzen das Ereignis <b>Beim Anzeigen <\/b>des Unterformulars, indem wir die entsprechende Eigenschaft den Wert <b>[Ereignisprozedur] <\/b>ausw&auml;hlen und dann auf die Schaltfl&auml;che mit den drei Punkten rechts von der Eigenschaft klicken. Dann erg&auml;nzen wir die im VBA-Editor angelegte Ereignisprozedur wie in Listing 1. Das Ereignis wird jeweils beim Verschieben des Datensatzzeigers auf einen der Datens&auml;tze ausgel&ouml;st, auch beim Verschieben auf den leeren, neuen Datensatz.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Current()\r\n     Me.Parent!cmdBearbeiten.Enabled = <span style=\"color:blue;\">Not<\/span> IsNull(Me!ArtikelID)\r\n     Me.Parent!cmdLoeschen.Enabled = <span style=\"color:blue;\">Not<\/span> IsNull(Me!ArtikelID)\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p class='imagetext'>Listing 1: Diese Prozedur aktiviert und deaktiviert die Schaltfl&auml;chen.<\/p>\n<p>In der Ereignisprozedur stellen wir die Eigenschaft <b>Enabled <\/b>der beiden Schaltfl&auml;chen jeweils auf den Wert des Ausdrucks <b>Not IsNull(Me!ArtikelID) <\/b>ein. <b>Me!Artikel <\/b>hat immer einen Wert, wenn der Datensatzzeiger auf einen Datensatz zeigt, im Falle des leeren, neuen Datensatzes liefert dies jedoch den Wert <b>Null<\/b>. In diesem Fall werden die beiden Schaltfl&auml;chen dann wie in der Abbildung deaktiviert. Beim Wechsel zu einem anderen Datensatz aktiviert die Ereignisprozedur die beiden Schaltfl&auml;chen jedoch wieder.<\/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\/55000362\/\">\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\/55000362?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\/55000362\/\"\/>\n\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"123b777de9\"\/>\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>Wenn Sie mit Haupt- und Unterformularen arbeiten und Ereignisprozeduren sowohl in der Code behind-Klasse des Haupt- und des Unterformulars angelegt haben, kann es manchmal un&uuml;bersichtlich werden. Das ist vor allem dann der Fall, wenn Ereignisse im Unterformular sich auf die Abl&auml;ufe im Hauptformular auswirken. Dieser Artikel zeigt, wie Sie die Ereignisse, die durch ein Unterformular ausgel&ouml;st werden, im Klassenmodul des Hauptformulars implementieren. Damit k&ouml;nnen Sie Ereignisse, Objekte und Variablen in nur noch einem Modul nutzen.<\/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":[662017,66042017,44000010],"tags":[],"class_list":["post-55000362","post","type-post","status-publish","format-standard","hentry","category-662017","category-66042017","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>Alle Ereignisse im Hauptformular - Access [basics]<\/title>\n<meta name=\"description\" content=\"Wenn Sie mit Haupt- und Unterformularen arbeiten und Ereignisprozeduren sowohl in der Code behind-Klasse des Haupt- und des Unterformulars angelegt haben, kann es manchmal un\u00fcbersichtlich werden. Das ist vor allem dann der Fall, wenn Ereignisse im Unterformular sich auf die Abl\u00e4ufe im Hauptformular auswirken. Dieser Artikel zeigt, wie Sie die Ereignisse, die durch ein Unterformular ausgel\u00f6st werden, im Klassenmodul des Hauptformulars implementieren. Damit k\u00f6nnen Sie Ereignisse, Objekte und Variablen in nur noch einem Modul nutzen.\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-basics.de\/index.php\/Alle_Ereignisse_im_Hauptformular.html\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Alle Ereignisse im Hauptformular - Access [basics]\" \/>\n<meta property=\"og:description\" content=\"Wenn Sie mit Haupt- und Unterformularen arbeiten und Ereignisprozeduren sowohl in der Code behind-Klasse des Haupt- und des Unterformulars angelegt haben, kann es manchmal un\u00fcbersichtlich werden. Das ist vor allem dann der Fall, wenn Ereignisse im Unterformular sich auf die Abl\u00e4ufe im Hauptformular auswirken. Dieser Artikel zeigt, wie Sie die Ereignisse, die durch ein Unterformular ausgel\u00f6st werden, im Klassenmodul des Hauptformulars implementieren. Damit k\u00f6nnen Sie Ereignisse, Objekte und Variablen in nur noch einem Modul nutzen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-basics.de\/index.php\/Alle_Ereignisse_im_Hauptformular.html\" \/>\n<meta property=\"og:site_name\" content=\"Access [basics]\" \/>\n<meta property=\"article:published_time\" content=\"2020-01-24T15:59:51+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_362_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=\"9\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\/Alle_Ereignisse_im_Hauptformular.html#primaryimage\",\"inLanguage\":\"de\",\"url\":\"..\/tl_files\/images\/pic_362_001.png\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Alle_Ereignisse_im_Hauptformular.html#webpage\",\"url\":\"https:\/\/access-basics.de\/index.php\/Alle_Ereignisse_im_Hauptformular.html\",\"name\":\"Alle Ereignisse im Hauptformular - Access [basics]\",\"isPartOf\":{\"@id\":\"https:\/\/access-basics.de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Alle_Ereignisse_im_Hauptformular.html#primaryimage\"},\"datePublished\":\"2020-01-24T15:59:51+00:00\",\"dateModified\":\"-0001-11-30T00:00:00+00:00\",\"author\":{\"@id\":\"https:\/\/access-basics.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f\"},\"description\":\"Wenn Sie mit Haupt- und Unterformularen arbeiten und Ereignisprozeduren sowohl in der Code behind-Klasse des Haupt- und des Unterformulars angelegt haben, kann es manchmal un\\u00fcbersichtlich werden. Das ist vor allem dann der Fall, wenn Ereignisse im Unterformular sich auf die Abl\\u00e4ufe im Hauptformular auswirken. Dieser Artikel zeigt, wie Sie die Ereignisse, die durch ein Unterformular ausgel\\u00f6st werden, im Klassenmodul des Hauptformulars implementieren. Damit k\\u00f6nnen Sie Ereignisse, Objekte und Variablen in nur noch einem Modul nutzen.\",\"breadcrumb\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Alle_Ereignisse_im_Hauptformular.html#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/access-basics.de\/index.php\/Alle_Ereignisse_im_Hauptformular.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Alle_Ereignisse_im_Hauptformular.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\/Alle_Ereignisse_im_Hauptformular.html\",\"url\":\"https:\/\/access-basics.de\/index.php\/Alle_Ereignisse_im_Hauptformular.html\",\"name\":\"Alle Ereignisse im Hauptformular\"}}]},{\"@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\/55000362","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=55000362"}],"version-history":[{"count":0,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000362\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/media?parent=55000362"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/categories?post=55000362"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/tags?post=55000362"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}