{"id":55000420,"date":"2018-10-01T00:00:00","date_gmt":"2020-01-24T16:00:13","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=420"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Formulare_per_VBA_referenzieren","status":"publish","type":"post","link":"https:\/\/access-basics.de\/index.php\/Formulare_per_VBA_referenzieren.html","title":{"rendered":"Formulare per VBA referenzieren"},"content":{"rendered":"<p class='introduction'>Wenn Sie Formulare und Steuerelemente programmieren wollen, m&uuml;ssen Sie wissen, wie Sie diese referenzieren. Nicht immer geschieht dies vom Klassenmodul des Formulars selbst aus &#8211; manchmal wollen Sie vielleicht auch von anderen Formularen auf die Steuer-elemente eines anderen Formulars zugreifen oder auch von einer VBA-Prozedur in eine Standardmodul. Dieser Artikel zeigt, wie Sie von verschiedenen Orten aus auf die Formulare zugreifen k&ouml;nnen. In weiteren Artikeln betrachten wir dann etwa den Zugriff auf die darin enthaltenen Steuer-elemente.<\/p>\n<h2>Beispieldatenbank<\/h2>\n<p>Die Beispiele dieses Artikels finden Sie in der Datenbank <b>1803_FormsControlsVBARead.accdb<\/b>.<\/p>\n<h2>Innerhalb des Formulars <\/h2>\n<p>Wenn Sie ein Formular erstellen und diesem ein Klassenmodul zuweisen, das sogenannte Code behind-Modul, dann k&ouml;nnen Sie von diesem aus auf andere Weise auf die Elemente des Formulars zugreifen als dies etwa von einem anderen Formular oder auch von einem Standardmodul aus m&ouml;glich ist.<\/p>\n<p>Hier steht n&auml;mlich das <b>Me<\/b>-Schl&uuml;sselwort f&uuml;r den Zugriff auf die Objektvariable des aktuellen Formulars zur Verf&uuml;gung. Zur Verdeutlichung legen Sie einfach einmal ein neues Formular in einer leeren Datenbank an und speichern dieses unter dem Namen <b>frmBeispiel<\/b>.<\/p>\n<p>Diesem f&uuml;gen wir nun eine Schaltfl&auml;che hinzu, die wir mit der Beschriftung <b>Name anzeigen <\/b>und dem Namen <b>cmdNameAnzeigen<\/b> versehen und f&uuml;r die wir eine neue Ereignisprozedur f&uuml;r das Ereignis <b>Beim Klicken <\/b>anlegen (siehe Bild 1).<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_420_001.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_420_001.png\" alt=\"Hinzuf&uuml;gen einer Ereignisprozedur f&uuml;r eine Schaltfl&auml;che\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 1: Hinzuf&uuml;gen einer Ereignisprozedur f&uuml;r eine Schaltfl&auml;che<\/p>\n<p>Der Ereignisprozedur f&uuml;gen wir nun eine Anweisung hinzu, die den Namen des Formulars in einem Meldungsfenster ausgeben soll:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdNameAnzeigen_Click()\r\n    <span style=\"color:blue;\">MsgBox<\/span> Me.Name\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Das hier wie selbstverst&auml;ndlich verwendete Schl&uuml;sselwort <b>Me <\/b>ist eine sehr praktische Vereinfachung f&uuml;r den Zugriff auf die Elemente des Formulars, auf das sich das Klassenmodul bezieht.<\/p>\n<p>Mit diesem Schl&uuml;sselwort k&ouml;nnen Sie auf alle Eigenschaften und Methoden des Formulars zugreifen und auch auf die darin angelegten Steuer-elemente &#8211; darauf gehen wir sp&auml;ter ein.<\/p>\n<h2>Von au&szlig;en<\/h2>\n<p>Wie aber greifen wir denn eigentlich von au&szlig;en auf dieses Formular zu Dazu m&uuml;ssen wir erst einmal wissen, ob das Formular ge&ouml;ffnet ist. Greifen wir auf ein Formular zu, das nicht ge&ouml;ffnet ist, erhalten wir einen Laufzeitfehler.<\/p>\n<p>Um dies auszuprobieren, f&uuml;gen Sie der Beispieldatenbank ein Standardmodul namens <b>mdlFormularzugriff <\/b>hinzu. Hier legen Sie die folgende Prozedur an:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>NameAnzeigen()\r\n    <span style=\"color:blue;\">MsgBox<\/span> Forms!frmBeispiel.Name\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Die Prozedur erledigt nichts anders als die im Formular f&uuml;r die Schaltfl&auml;che <b>cmdNameAnzeigen <\/b>&#8211; Sie gibt ein Meldungsfenster mit dem Namen des Formulars aus.<\/p>\n<p>Allerdings wissen wir, wenn wir auf die Schaltfl&auml;che des Formulars klicken, dass dieses logischerweise gerade ge&ouml;ffnet ist und brauchen dies nicht zu pr&uuml;fen. Beim Zugriff von au&szlig;en m&uuml;ssen wir dies jedoch vorher absichern. Rufen Sie die obige Prozedur auf, nachdem Sie das Formular geschlossen haben, l&ouml;st dies den Fehler aus Bild 2 aus.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_420_002.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_420_002.png\" alt=\"Fehler beim Zugriff auf ein nicht ge&ouml;ffnetes Formular\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 2: Fehler beim Zugriff auf ein nicht ge&ouml;ffnetes Formular<\/p>\n<h2>Pr&uuml;fen, ob ein Formular ge&ouml;ffnet ist<\/h2>\n<p>F&uuml;r die Pr&uuml;fung, ob ein Formular ge&ouml;ffnet ist, hat sich die folgende Funktion etabliert. Sie erwartet den Namen des zu untersuchenden Formulars als Parameter. Sie nutzt die <b>SysCmd<\/b>-Funktion, der sie die Konstante <b>acSysCmdGetObjectState<\/b>, den Objekttyp undd den Namen des Formulars &uuml;bergibt. Wenn das Ergebnis gr&ouml;&szlig;er als <b>0 <\/b>ist, ist das Formular ge&ouml;ffnet:<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>IstFormularGeoeffnet(strFormular<span style=\"color:blue;\"> As <\/span>                                      String)<span style=\"color:blue;\"> As Boolean<\/span>\r\n    IstFormularGeoeffnet = SysCmd(        acSysCmdGetObjectState, acForm, strFormular) > 0\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p>Mit dieser Funktion k&ouml;nnen wir bei Zugriff von au&szlig;en leicht pr&uuml;fen, ob das Formular ge&ouml;ffnet ist. Die obige Prozedur erweitern wir dabei wie folgt:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>NameAnzeigen()\r\n    <span style=\"color:blue;\">If <\/span>IstFormularGeoeffnet(\"frmBeispiel\")<span style=\"color:blue;\"> Then<\/span>\r\n        <span style=\"color:blue;\">MsgBox<\/span> Forms!frmBeispiel.Name\r\n    <span style=\"color:blue;\">Else<\/span>\r\n        <span style=\"color:blue;\">MsgBox<\/span> \"Das Formular ist nicht ge&ouml;ffnet.\"\r\n    <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Wenn das Formular nicht ge&ouml;ffnet ist, weist die Prozedur per Meldungsfenster auf diesen Zustand hin.<\/p>\n<h2>Auf das aktuelle Formular zugreifen<\/h2>\n<p>In manchen F&auml;llen m&ouml;chten Sie auch einfach auf das aktuell ge&ouml;ffnete Formular zugreifen, um beispielsweise dessen Namen zu ermitteln. Hierf&uuml;r stellt Microsoft eine Klasse mit verschiedenen Eigenschaften bereit. Diese hei&szlig;t <b>Screen <\/b>und liefert beispielsweise &uuml;ber die Eigenschaft <b>ActiveForm <\/b>Zugriff auf das aktuell aktive Formular. Die folgende Prozedur gibt beispielsweise den Namen des aktuellen Formulars aus:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>AktuellesFormular()\r\n    <span style=\"color:blue;\">MsgBox<\/span> Screen.ActiveForm.Name\r\n<span style=\"color:blue;\">End Sub<\/span><\/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\/55000420\/\">\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\/55000420?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\/55000420\/\"\/>\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>Wenn Sie Formulare und Steuerelemente programmieren wollen, m&uuml;ssen Sie wissen, wie Sie diese referenzieren. Nicht immer geschieht dies vom Klassenmodul des Formulars selbst aus &#8211; manchmal wollen Sie vielleicht auch von anderen Formularen auf die Steuer-elemente eines anderen Formulars zugreifen oder auch von einer VBA-Prozedur in eine Standardmodul. Dieser Artikel zeigt, wie Sie von verschiedenen Orten aus auf die Formulare zugreifen k&ouml;nnen. In weiteren Artikeln betrachten wir dann etwa den Zugriff auf die darin enthaltenen Steuer-elemente.<\/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":[662018,66052018,44000010],"tags":[],"class_list":["post-55000420","post","type-post","status-publish","format-standard","hentry","category-662018","category-66052018","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>Formulare per VBA referenzieren - Access [basics]<\/title>\n<meta name=\"description\" content=\"Wenn Sie Formulare und Steuerelemente programmieren wollen, m\u00fcssen Sie wissen, wie Sie diese referenzieren. Nicht immer geschieht dies vom Klassenmodul des Formulars selbst aus \u2013 manchmal wollen Sie vielleicht auch von anderen Formularen auf die Steuer\u00adelemente eines anderen Formulars zugreifen oder auch von einer VBA-Prozedur in eine Standardmodul. Dieser Artikel zeigt, wie Sie von verschiedenen Orten aus auf die Formulare zugreifen k\u00f6nnen. In weiteren Artikeln betrachten wir dann etwa den Zugriff auf die darin enthaltenen Steuer\u00adelemente.\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-basics.de\/index.php\/Formulare_per_VBA_referenzieren.html\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Formulare per VBA referenzieren - Access [basics]\" \/>\n<meta property=\"og:description\" content=\"Wenn Sie Formulare und Steuerelemente programmieren wollen, m\u00fcssen Sie wissen, wie Sie diese referenzieren. Nicht immer geschieht dies vom Klassenmodul des Formulars selbst aus \u2013 manchmal wollen Sie vielleicht auch von anderen Formularen auf die Steuer\u00adelemente eines anderen Formulars zugreifen oder auch von einer VBA-Prozedur in eine Standardmodul. Dieser Artikel zeigt, wie Sie von verschiedenen Orten aus auf die Formulare zugreifen k\u00f6nnen. In weiteren Artikeln betrachten wir dann etwa den Zugriff auf die darin enthaltenen Steuer\u00adelemente.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-basics.de\/index.php\/Formulare_per_VBA_referenzieren.html\" \/>\n<meta property=\"og:site_name\" content=\"Access [basics]\" \/>\n<meta property=\"article:published_time\" content=\"2020-01-24T16:00:13+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_420_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=\"10\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\/Formulare_per_VBA_referenzieren.html#primaryimage\",\"inLanguage\":\"de\",\"url\":\"..\/tl_files\/images\/pic_420_001.png\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Formulare_per_VBA_referenzieren.html#webpage\",\"url\":\"https:\/\/access-basics.de\/index.php\/Formulare_per_VBA_referenzieren.html\",\"name\":\"Formulare per VBA referenzieren - Access [basics]\",\"isPartOf\":{\"@id\":\"https:\/\/access-basics.de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Formulare_per_VBA_referenzieren.html#primaryimage\"},\"datePublished\":\"2020-01-24T16:00:13+00:00\",\"dateModified\":\"-0001-11-30T00:00:00+00:00\",\"author\":{\"@id\":\"https:\/\/access-basics.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f\"},\"description\":\"Wenn Sie Formulare und Steuerelemente programmieren wollen, m\\u00fcssen Sie wissen, wie Sie diese referenzieren. Nicht immer geschieht dies vom Klassenmodul des Formulars selbst aus \\u2013 manchmal wollen Sie vielleicht auch von anderen Formularen auf die Steuer\\u00adelemente eines anderen Formulars zugreifen oder auch von einer VBA-Prozedur in eine Standardmodul. Dieser Artikel zeigt, wie Sie von verschiedenen Orten aus auf die Formulare zugreifen k\\u00f6nnen. In weiteren Artikeln betrachten wir dann etwa den Zugriff auf die darin enthaltenen Steuer\\u00adelemente.\",\"breadcrumb\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Formulare_per_VBA_referenzieren.html#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/access-basics.de\/index.php\/Formulare_per_VBA_referenzieren.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Formulare_per_VBA_referenzieren.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\/Formulare_per_VBA_referenzieren.html\",\"url\":\"https:\/\/access-basics.de\/index.php\/Formulare_per_VBA_referenzieren.html\",\"name\":\"Formulare per VBA referenzieren\"}}]},{\"@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\/55000420","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=55000420"}],"version-history":[{"count":0,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000420\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/media?parent=55000420"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/categories?post=55000420"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/tags?post=55000420"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}