{"id":55001414,"date":"2023-02-01T00:00:00","date_gmt":"2023-06-17T09:32:32","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1414"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"VBA_Punkt_oder_Ausrufezeichen","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/VBA_Punkt_oder_Ausrufezeichen\/","title":{"rendered":"VBA: Punkt oder Ausrufezeichen"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg08.met.vgwort.de\/na\/5d7093800519425c9b77a4c44d0a783f\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Unter VBA gibt es Gelegenheiten, wo man zwischen zwei Elemente entweder einen Punkt oder ein Aufrufezeichen setzen kann, zum Beispiel bei gebundenen Steuerelementen in der Form Me.Vorname oder rst!Vorname. Im Gegensatz dazu stehen beispielsweise die Elemente eines Recordsets &#8211; hier k&ouml;nnen wir nur rst!Vorname verwenden, rst.Vorname f&uuml;hrt zu einem Fehler. Ganz kompliziert wird es, wenn wir gebundene Steuerelemente auch noch umbenennen. Dann k&ouml;nnen wir auf den Wert des Steuerelements sowohl &uuml;ber Me!Vorname, Me.Vorname, Me!txtVorname oder Me.txtVorname zugreifen. Und manchmal f&uuml;hrt die Syntax mit dem Punkt zu ernsthaften Verwirrungen, weshalb man in manchen F&auml;llen auf jeden Fall die Ausrufezeichen-Syntax nutzen sollte.<\/b><\/p>\n<p>Wir fangen mal vorn an: Von Punkten und Ausrufezeichen bleibt man solange verschont, wie man nicht per VBA auf den Inhalt von Steuerelementen oder Feldern zugreifen m&ouml;chte. Das Problem daran ist: Ohne das ist man dabei recht eingeschr&auml;nkt. Das Gute ist: Wenn man einmal an die Stelle gelangt ist, wo man Objektbez&uuml;ge &uuml;ber Punkte und\/oder Ausrufezeichen herstellt, kann man nicht viel falsch machen &#8211; und wo es dabei Stolpersteine gibt, erl&auml;utern wir in diesem Beitrag.<\/p>\n<h2>Punkte und Ausrufezeichen in Recordsets und &auml;hnlichen Elementen<\/h2>\n<p>Wir beginnen dort, wo der Einsatz eindeutig geregelt ist. Wenn man beispielsweise eine Schleife programmieren m&ouml;chte, mit der man die Datens&auml;tze eines Recordsets durchl&auml;uft, m&ouml;chte man auf die Felder dieses Recordsets zugreifen. Das Recordset bietet einige Eigenschaften und Methoden an, die man wie bei allen Objekten mit der Punkt-Syntax adressieren kann, also indem man den Namen der Objektvariablen, meist <b>rst<\/b>, eingibt und dann einen Punkt setzt, um per IntelliSense die m&ouml;glichen Elemente zu sehen. Das Ergebnis ist eine Liste wie in Bild 1.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_01\/pic_1414_001.png\" alt=\"Nutzung des Punktes f&uuml;r die Anzeige von Elementen per IntelliSense\" width=\"424,5589\" height=\"275,1468\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Nutzung des Punktes f&uuml;r die Anzeige von Elementen per IntelliSense<\/span><\/b><\/p>\n<p>Dar&uuml;ber findet man beim Recordset alle m&ouml;glichen Eintr&auml;ge, aber nicht die Felder des Recordsets. Diese k&ouml;nnen wir auch nicht &uuml;ber die Punkt-Syntax referenzieren. <b>rst.KategorieID <\/b>funktioniert also nicht, sondern wirft den Fehler <b>Methode oder Datenobjekt nicht gefunden<\/b>. Stattdessen nutzen wir an dieser Stelle in der k&uuml;rzesten Form das Ausrufezeichen, also beispielsweise <b>rst!KategorieID<\/b>. Wir haben hier keine IntelliSense-Unterst&uuml;tzung, aber immerhin liefert dies den Wert des Feldes f&uuml;r den jeweiligen Datensatz. Im Detail sieht das wie im folgenden Beispiel aus:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>PunktOderAusrufezeichen()\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     <span style=\"color:blue;\">Dim <\/span>rst<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     <span style=\"color:blue;\">Set<\/span> rst = db.OpenRecordset(\"tblKategorien\", dbOpenDynaset)\r\n     <span style=\"color:blue;\">Do While<\/span> <span style=\"color:blue;\">Not<\/span> rst.EOF\r\n         <span style=\"color:blue;\">Debug.Print<\/span> rst!KategorieID, rst!Kategorie\r\n         rst.Move<span style=\"color:blue;\">Next<\/span>\r\n     <span style=\"color:blue;\">Loop<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Wie wir hier sehen, werden die Eigenschaften und Methoden, also <b>EOF <\/b>oder <b>MoveNext<\/b>, mit der Punkt-Syntax verwendet. Wir haben in diesem Fall also eine eindeutige Aufteilung: Eigenschaften und Methoden erreichen wir mit einem Punkt, die Felder mit dem Ausrufezeichen.<\/p>\n<p>Warum aber k&ouml;nnen wir die Felder &uuml;berhaupt mit dem Ausrufezeichen adressieren? Weil es sich bei den Feldern um Elemente einer Auflistung handelt, genau genommen sogar um die einer Auflistung mit benutzerdefinierten Elementen, und weil das Ausrufezeichen in diesem Fall als Abk&uuml;rzung f&uuml;r eine ausf&uuml;hrlichere Schreibweise verwendet werden kann. <b>rst!KategorieID <\/b>steht n&auml;mlich eigentlich f&uuml;r ein Element der <b>Fields<\/b>-Auflistung des <b>Recordset<\/b>-Objekts:<\/p>\n<pre><span style=\"color:blue;\">Debug.Print<\/span> rst.Fields(\"KategorieID\")<\/pre>\n<p>Und auch das ist noch nicht die ganze Wahrheit, denn <b>rst.Fields(&#8222;Kategorie&#8220;) <\/b>k&ouml;nnen wir auch nur verwenden, weil man die Standardeigenschaft eines Elements immer weglassen kann. Eigentlich hei&szlig;t der Ausdruck n&auml;mlich wie folgt, und dabei ist <b>Value <\/b>die Standardeigenschaft des <b>Field<\/b>-Objekts, das wir mit <b>Fields(&#8222;KategorieID&#8220;) <\/b>referenzieren:<\/p>\n<pre><span style=\"color:blue;\">Debug.Print<\/span> rst.Fields(\"KategorieID\").Value<\/pre>\n<p>Das Beispiel finden Sie im Modul <b>mdlPunktUndAusrufezeichenInRecordset<\/b>.<\/p>\n<h2>Eigenschaften und Felder in Formular- und Berichtsmodulen<\/h2>\n<p>Eine andere Situation finden wir vor, wenn wir die Klassenmodule von Formularen oder Berichten betrachten, die an eine Datensatzquelle wie eine Tabelle oder Abfrage gebunden sind &#8211; und hier speziell bei den Steuerelementen und den Feldern der Datensatzquelle.<\/p>\n<p>Binden wir ein Formular an eine Tabelle wie <b>tblKategorien<\/b>, welche die beiden Felder <b>KategorieID <\/b>und <b>Kategorie <\/b>enth&auml;lt, und f&uuml;gen wir diese beiden Felder zum Detailbereich des Formularentwurfs hinzu, k&ouml;nnen wir beispielsweise in der VBA-Ereignisprozedur, die durch eine Schaltfl&auml;che ausgel&ouml;st wird, wie folgt auf die Werte der gebundenen Felder zugreifen:<\/p>\n<pre><span style=\"color:blue;\">Debug.Print<\/span> Me.KategorieID, Me.KategorieID<\/pre>\n<p>Wir nutzen also einfach mit <b>Me <\/b>den Verweis auf das Klassenmodul selbst und k&ouml;nnen dann nach Eingabe des Punktes nicht nur auf die Eigenschaften und Methoden des Formulars zugreifen, sondern auch auf die Feldnamen der Datensatzquelle des Formulars.<\/p>\n<p>Noch besser: Obwohl es sich hier nicht um eingebaute Eigenschaften der Formularklasse handelt, k&ouml;nnen wir IntelliSense nutzen, um darauf zuzugreifen &#8211; siehe Bild 2! Warum ist das &uuml;berhaupt m&ouml;glich? Der Hintergrund ist, dass Access beim Hinzuf&uuml;gen einer Datensatzquelle zu einem Formular automatisch f&uuml;r jedes Feld eine eigene Eigenschaft zum Klassenmodul des Formulars hinzuf&uuml;gt. Deshalb werden diese auch per IntelliSense angezeigt. Wir k&ouml;nnen hier aber auch, genau wie beim <b>Recordset<\/b>-Objekt, &uuml;ber die Ausrufezeichen-Syntax auf die Felder zugreifen. Das sieht so aus:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_01\/pic_1414_002.png\" alt=\"Zugriff per Punkt und IntelliSense auf die Felder der Datensatzherkunft\" width=\"424,5589\" height=\"239,129\" \/><\/p>\n<p>[<\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Zugriff per Punkt und IntelliSense auf die Felder der Datensatzherkunft<\/span><\/b><\/p>\n<pre><span style=\"color:blue;\">Debug.Print<\/span> Me!KategorieID, Me!Kategorie<\/pre>\n<p>Auch hier haben wir es, genau wie beim Recordset, wieder mit einer Abk&uuml;rzung zu tun, diesmal allerdings nicht f&uuml;r die <b>Fields<\/b>-Auflistung, sondern f&uuml;r die <b>Controls<\/b>-Auflistung. Weiter unten unter <b>Was macht das Ausrufezeichen eigentlich genau?<\/b> erl&auml;utern wir, warum wir mit dem Ausrufezeichen einmal die <b>Fields<\/b>&#8211; und einmal die <b>Controls<\/b>-Auflistung abk&uuml;rzen k&ouml;nnen.<\/p>\n<p>F&uuml;r das Feld <b>KategorieID <\/b>w&uuml;rde ein etwas weniger verk&uuml;rzter Ausdruck also wie folgt aussehen:<\/p>\n<pre><span style=\"color:blue;\">Debug.Print<\/span> Me.Controls(\"KategorieID\")<\/pre>\n<p>Und auch hier ist <b>Value <\/b>die Standardeigenschaft, sodass wir schlie&szlig;lich bei der folgenden ausf&uuml;hrlichen Variante landen:<\/p>\n<pre><span style=\"color:blue;\">Debug.Print<\/span> Me.Controls(\"KategorieID\").Value<\/pre>\n<p>Soweit, so gut: Wir k&ouml;nnen also sowohl mit der Punkt- als auch mit der Ausrufezeichen-Syntax auf die Steuerelemente eines Formulars zugreifen.<\/p>\n<p>Schauen wir uns nun die Eigenschaften der gebundenen Felder an, die wir &uuml;ber die Feldliste zum Formular hinzugef&uuml;gt haben, dann sehen wir, dass der Ausdruck <b>KategorieID <\/b>sowohl als Steuerelementname als auch f&uuml;r die Eigenschaft <b>Steuerelementinhalt <\/b>angegeben wird (siehe Bild 3). Worauf greifen wir also eigentlich genau zu, wenn wir <b>Me.KategorieID <\/b>oder <b>Me!KategorieID <\/b>referenzieren?<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_01\/pic_1414_003.png\" alt=\"Name und Steuerelementinhalt sind identisch.\" width=\"499,5589\" height=\"214,437\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Name und Steuerelementinhalt sind identisch.<\/span><\/b><\/p>\n<p>Wir f&uuml;gen der Prozedur f&uuml;r die Schaltfl&auml;che zwei Zeilen hinzu, um den Typ der mit Punkt und Ausrufezeichen angesprochenen Elemente zu ermitteln:<\/p>\n<pre><span style=\"color:blue;\">Debug.Print<\/span> \"Typename ''Me.KategorieID'': \" _\r\n     & TypeName(Me.KategorieID)\r\n<span style=\"color:blue;\">Debug.Print<\/span> \"Typename ''Me!KategorieID'': \" _\r\n     & TypeName(Me!KategorieID)<\/pre>\n<p>Das Ergebnis sieht wie folgt aus:<\/p>\n<pre>Typename ''Me.KategorieID'': TextBox\r\nTypename ''Me!KategorieID'': TextBox<\/pre>\n<p>Wir greifen also in beiden F&auml;llen auf das Steuerelement zu, welches durch die implizit angegebene Standardeigenschaft wiederum &uuml;ber das f&uuml;r Steuerelementinhalt angegebene Feld den Wert f&uuml;r den aktuellen Datensatz ermittelt.<\/p>\n<p>Den Beispielcode finden Sie im Klassenmodul des Formulars <b>frmKategorien<\/b>.<\/p>\n<h2>Steuerelemente umbenennen<\/h2>\n<p>Jetzt gestalten wir es etwas interessanter: Wir benennen die Steuerelemente <b>KategorieID <\/b>und <b>Kategorie <\/b>in <b>txtKategorieID <\/b>und <b>txtKategorie <\/b>um. In einer Ereignisprozedur lassen wir uns nun die Werte f&uuml;r <b>KategorieID <\/b>in verschiedenen Konstellationen ausgeben:<\/p>\n<pre><span style=\"color:blue;\">Debug.Print<\/span> Me.KategorieID\r\n<span style=\"color:blue;\">Debug.Print<\/span> Me!KategorieID\r\n<span style=\"color:blue;\">Debug.Print<\/span> Me.txtKategorieID\r\n<span style=\"color:blue;\">Debug.Print<\/span> Me!txtKategorieID<\/pre>\n<p>Dies liefert f&uuml;r alle Ausdr&uuml;cke den gleichen Wert, n&auml;mlich den Wert des Feldes <b>KategorieID <\/b>der Datensatzquelle. Und nicht nur <b>KategorieID<\/b>, sondern auch <b>txtKategorieID <\/b>k&ouml;nnen &uuml;ber den Punkt per IntelliSense ausgew&auml;hlt werden.<\/p>\n<p>Nun setzen wir wieder die <b>Typename<\/b>-Funktion ein, um herauszufinden, worauf wir zugreifen: <\/p>\n<pre><span style=\"color:blue;\">Debug.Print<\/span> \"Me.KategorieID: \" & TypeName(Me.KategorieID)\r\n<span style=\"color:blue;\">Debug.Print<\/span> \"Me!KategorieID: \" & TypeName(Me!KategorieID)\r\n<span style=\"color:blue;\">Debug.Print<\/span> \"Me.txtKategorieID: \" & TypeName(Me.txtKategorieID)\r\n<span style=\"color:blue;\">Debug.Print<\/span> \"Me!txtKategorieID: \" & TypeName(Me!txtKategorieID)<\/pre>\n<p>Das Ergebnis sieht nun wie folgt aus:<\/p>\n<pre>Me.KategorieID: AccessField\r\nMe!KategorieID: AccessField\r\nMe.txtKategorieID: TextBox\r\nMe!txtKategorieID: TextBox<\/pre>\n<p>Nun greifen wir also mit <b>txtKategorieID <\/b>nach wie vor auf die <b>TextBox<\/b>-Elemente zu, aber mit <b>KategorieID <\/b>direkt auf Elemente des Typs <b>AccessField<\/b>. Das erkl&auml;rt sich dadurch, dass es nun kein <b>TextBox<\/b>-Element namens <b>KategorieID <\/b>mehr gibt. Wenn ein gebundenes Steuerelement also genauso hei&szlig;t wie das &uuml;ber die Eigenschaft <b>Steuerelementinhalt <\/b>gebundene Feld, dann wird &uuml;ber den Feldnamen das entsprechende Steuerelement referenziert, anderenfalls das daran gebundene <b>AccessField<\/b>-Element. Und immer noch k&ouml;nnen wir die Punkt- und die Ausrufezeichen-Syntax gleicherma&szlig;en verwenden.<\/p>\n<p>Die Beispiele finden Sie im Klassenmodul des Formulars <b>frmKategorienMitPraefix<\/b>.<\/p>\n<h2>Wann die Punkt-Syntax zum Problem wird<\/h2>\n<p>Damit kommen wir zu den F&auml;llen, wo die Punkt-Syntax nicht mehr zum Referenzieren von Steuerelementen oder Feldern verwendet werden kann beziehungsweise wo Probleme auftreten k&ouml;nnen. Das ist immer der Fall, wenn ein Feldname einer Tabelle oder Abfrage mit dem Namen einer Formulareigenschaft &uuml;bereinstimmt.<\/p>\n<p>Es gibt nicht sehr viele Formular-Eigenschaften, die &ouml;fter mal als Feldname verwendet werden, aber potenzielle Kandidaten sind <b>Caption<\/b>, <b>Filter<\/b>, <b>Page<\/b>, <b>Parent<\/b>, <b>Picture<\/b>, <b>Properties<\/b>, <b>Tag<\/b>, <b>Width <\/b>und andere. Die Bezeichnung <b>Name <\/b>wird praktischerweise direkt beim Versuch, ein solches Feld anzulegen, als m&ouml;gliche Feldbezeichnung ausgeschlossen. Andere lassen sich aber ohne Weiteres als Feldnamen verwenden (siehe Bild 4).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_01\/pic_1414_004.png\" alt=\"Feldnamen, die nach Formulareigenschaften benannt sind\" width=\"424,5589\" height=\"268,2536\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Feldnamen, die nach Formulareigenschaften benannt sind<\/span><\/b><\/p>\n<p>Nun legen wir f&uuml;r die Eigenschaft <b>Beschriftung <\/b>eines Formulars namens <b>frmProbleme <\/b>den Wert <b>Formulartitel <\/b>fest. Unter VBA hei&szlig;t diese Eigenschaft <b>Caption<\/b>, was gleich noch wichtig sein wird.<\/p>\n<p>Diesem Formular f&uuml;gen wir nun die oben beschriebene Tabelle <b>tblCategories <\/b>hinzu, welche das Feld <b>Caption <\/b>enth&auml;lt, und ziehen dieses Feld in den Detailbereich des Formularentwurfs, was ein neues Feld namens <b>Caption <\/b>anlegt &#8211; mit dem Wert <b>Caption <\/b>f&uuml;r die Eigenschaft <b>Steuerelementinhalt<\/b>. F&uuml;r die Schaltfl&auml;che hinterlegen wir den folgenden Code und lassen uns somit wieder den Inhalt eines Feldes ausgeben &#8211; einmal mit dem Punkt- und einmal mit dem Ausrufezeichen-Operator:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdOK_Click()\r\n     <span style=\"color:blue;\">Debug.Print<\/span> \"Me.Caption: \" & Me.Caption\r\n     <span style=\"color:blue;\">Debug.Print<\/span> \"Me!Caption: \" & Me!Caption\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Das Ergebnis sieht wie folgt aus (der Wert des Feldes <b>Caption <\/b>hei&szlig;t <b>Caption 1<\/b>):<\/p>\n<pre>Me.Caption: Formulartitel\r\nMe!Caption: Caption 1<\/pre>\n<p>Wenn es ein Feld gibt, das genauso wie eine Eigenschaft des Formulars hei&szlig;t, greifen wir also &uuml;ber die Punkt-Syntax auf die Eigenschaft und &uuml;ber die Ausrufezeichen-Syntax auf das Steuerelement zu! Und das ist auch der einzige Grund, warum man das Ausrufezeichen dem Punkt vorziehen sollte, wenn es um das Referenzieren von Steuerelementen oder Feldern der Datensatzquelle eines Formulars geht. Es k&ouml;nnte irgendwann mal Probleme geben, wenn eine Tabelle ein nach einer Formulareigenschaft benanntes Feld enth&auml;lt.<\/p>\n<p>Ich pers&ouml;nlich verwende immer zuerst den Punkt, um mit IntelliSense schnell die Steuerelemente oder Felder auszuw&auml;hlen, und ersetze den Punkt dann durch das Ausrufezeichen. Wenn man Steuerelemente mit Pr&auml;fixen wie <b>txt<\/b>, <b>cbo <\/b>oder <b>cmd <\/b>ersetzt, sinkt die Wahrscheinlichkeit, dass ein solches den gleichen Namen hat wie eine Formulareigenschaft, allerdings quasi auf Null.<\/p>\n<h2>Sonderfall Berichte<\/h2>\n<p>Bei Berichten finden wir (zumindest in &auml;lteren Versionen von Access) noch eine etwas andere Situation vor: Hier werden beim Festlegen der Datensatzquelle nicht automatisch alle Felder als Eigenschaften zur <b>Report<\/b>-Klasse hinzuf&uuml;gt. Dies geschieht erst, wenn man die jeweiligen Felder zum Entwurf des Berichts hinzuf&uuml;gt. Um dort &uuml;ber die Punkt- oder Ausrufezeichen-Syntax auf ein Feld zugreifen zu k&ouml;nnen, muss dieses zum Bericht hinzugef&uuml;gt werden. Allerdings konnte ich dieses Verhalten mit der aktuellen Version von Access (Microsoft Access f&uuml;r Microsoft 365 MSO (Version 2211 Build 16.0.15806.20000) nicht mehr nachvollziehen, hier waren die Feldnamen der Datensatzquelle direkt nach dem Hinzuf&uuml;gen der selbigen per VBA\/IntelliSense referenzierbar.<\/p>\n<h2>Was macht das Ausrufezeichen eigentlich genau?<\/h2>\n<p>Wir haben weiter oben gesehen, das das Ausrufezeichen beim <b>Recordset<\/b>-Objekt den Zugriff auf die <b>Fields<\/b>-Auflistung abk&uuml;rzen kann und beim <b>Form<\/b>-Objekt offensichtlich den Zugriff auf die <b>Controls<\/b>-Auflistung. Aber wo wird eigentlich festgelegt, in welchem Objekt das Ausrufezeichen welche Auflistung verk&uuml;rzt referenzieren kann?<\/p>\n<p>Dazu ist zun&auml;chst zu korrigieren, dass das Ausrufezeichen nicht ausschlie&szlig;lich die Referenzierung von Auflistungen verk&uuml;rzen kann, sondern auch von anderen Eigenschaften &#8211; Voraussetzung ist lediglich, dass diese einen Wert des Typs String als Parameter entgegennimmt.<\/p>\n<p>Au&szlig;erdem verk&uuml;rzt das Ausrufezeichen die Referenz genau auf die Eigenschaft einer Klasse, die als Standardeigenschaft festgelegt ist! Welche das ist, k&ouml;nnen wir beispielsweise im Objektkatalog nachsehen &#8211; es handelt sich dabei um das Objekt mit der Markierung aus Bild 5. F&uuml;r diesen Eintrag ist au&szlig;erdem im Beschreibungstext der Hinweis <b>Standardelement von &#8230; <\/b>angegeben.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_01\/pic_1414_005.png\" alt=\"Markierung einer Standardeigenschaft\" width=\"424,5589\" height=\"348,335\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Markierung einer Standardeigenschaft<\/span><\/b><\/p>\n<p>Weiter oben schrieben wir, dass das Ausrufezeichen bei der <b>Form<\/b>-Klasse &#8222;offensichtlich&#8220; den Zugriff auf die <b>Controls<\/b>-Auflistung vereinfacht. Das ist allerdings nicht die ganze Wahrheit, denn wie wir gesehen haben, finden wir dort nicht nur die Namen der Steuerelemente, sondern auch noch die Namen der Felder der Datensatzquelle des Formulars.<\/p>\n<h2>Downloads zu diesem Beitrag<\/h2>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>VBAPunktOderAusrufezeichen.accdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/D4277D35-74AC-4F5A-878B-99B8AEC24170\/aiu_1414.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Unter VBA gibt es Gelegenheiten, wo man zwischen zwei Elemente entweder einen Punkt oder ein Aufrufezeichen setzen kann, zum Beispiel bei gebundenen Steuerelementen in der Form Me.Vorname oder rst!Vorname. Im Gegensatz dazu stehen beispielsweise die Elemente eines Recordsets &#8211; hier k&ouml;nnen wir nur rst!Vorname verwenden, rst.Vorname f&uuml;hrt zu einem Fehler. Ganz kompliziert wird es, wenn wir gebundene Steuerelemente auch noch umbenennen. Dann k&ouml;nnen wir auf den Wert des Steuerelements sowohl &uuml;ber Me!Vorname, Me.Vorname, Me!txtVorname oder Me.txtVorname zugreifen. Und manchmal f&uuml;hrt die Syntax mit dem Punkt zu ernsthaften Verwirrungen, weshalb man in manchen F&auml;llen auf jeden Fall die Ausrufezeichen-Syntax nutzen sollte.<\/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":[66012023,662023,44000025],"tags":[],"class_list":["post-55001414","post","type-post","status-publish","format-standard","hentry","category-66012023","category-662023","category-VBA_und_Programmiertechniken"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.5) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>VBA: Punkt oder Ausrufezeichen - Access im Unternehmen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-im-unternehmen.de\/VBA_Punkt_oder_Ausrufezeichen\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"VBA: Punkt oder Ausrufezeichen\" \/>\n<meta property=\"og:description\" content=\"Unter VBA gibt es Gelegenheiten, wo man zwischen zwei Elemente entweder einen Punkt oder ein Aufrufezeichen setzen kann, zum Beispiel bei gebundenen Steuerelementen in der Form Me.Vorname oder rst!Vorname. Im Gegensatz dazu stehen beispielsweise die Elemente eines Recordsets - hier k&ouml;nnen wir nur rst!Vorname verwenden, rst.Vorname f&uuml;hrt zu einem Fehler. Ganz kompliziert wird es, wenn wir gebundene Steuerelemente auch noch umbenennen. Dann k&ouml;nnen wir auf den Wert des Steuerelements sowohl &uuml;ber Me!Vorname, Me.Vorname, Me!txtVorname oder Me.txtVorname zugreifen. Und manchmal f&uuml;hrt die Syntax mit dem Punkt zu ernsthaften Verwirrungen, weshalb man in manchen F&auml;llen auf jeden Fall die Ausrufezeichen-Syntax nutzen sollte.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/VBA_Punkt_oder_Ausrufezeichen\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2023-06-17T09:32:32+00:00\" \/>\n<meta name=\"author\" content=\"Andr\u00e9 Minhorst\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andr\u00e9 Minhorst\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"11\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/VBA_Punkt_oder_Ausrufezeichen\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/VBA_Punkt_oder_Ausrufezeichen\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"VBA: Punkt oder Ausrufezeichen\",\"datePublished\":\"2023-06-17T09:32:32+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/VBA_Punkt_oder_Ausrufezeichen\\\/\"},\"wordCount\":2015,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/VBA_Punkt_oder_Ausrufezeichen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/5d7093800519425c9b77a4c44d0a783f\",\"articleSection\":[\"1\\\/2023\",\"2023\",\"VBA und Programmiertechniken\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/VBA_Punkt_oder_Ausrufezeichen\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/VBA_Punkt_oder_Ausrufezeichen\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/VBA_Punkt_oder_Ausrufezeichen\\\/\",\"name\":\"VBA: Punkt oder Ausrufezeichen - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/VBA_Punkt_oder_Ausrufezeichen\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/VBA_Punkt_oder_Ausrufezeichen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/5d7093800519425c9b77a4c44d0a783f\",\"datePublished\":\"2023-06-17T09:32:32+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/VBA_Punkt_oder_Ausrufezeichen\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/VBA_Punkt_oder_Ausrufezeichen\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/VBA_Punkt_oder_Ausrufezeichen\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/5d7093800519425c9b77a4c44d0a783f\",\"contentUrl\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/5d7093800519425c9b77a4c44d0a783f\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/VBA_Punkt_oder_Ausrufezeichen\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"VBA: Punkt oder Ausrufezeichen\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"name\":\"Access im Unternehmen\",\"description\":\"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/access-im-unternehmen.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\",\"name\":\"Andr\u00e9 Minhorst Verlag\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"contentUrl\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"width\":370,\"height\":111,\"caption\":\"Andr\u00e9 Minhorst Verlag\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"VBA: Punkt oder Ausrufezeichen - Access im Unternehmen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/access-im-unternehmen.de\/VBA_Punkt_oder_Ausrufezeichen\/","og_locale":"de_DE","og_type":"article","og_title":"VBA: Punkt oder Ausrufezeichen","og_description":"Unter VBA gibt es Gelegenheiten, wo man zwischen zwei Elemente entweder einen Punkt oder ein Aufrufezeichen setzen kann, zum Beispiel bei gebundenen Steuerelementen in der Form Me.Vorname oder rst!Vorname. Im Gegensatz dazu stehen beispielsweise die Elemente eines Recordsets - hier k&ouml;nnen wir nur rst!Vorname verwenden, rst.Vorname f&uuml;hrt zu einem Fehler. Ganz kompliziert wird es, wenn wir gebundene Steuerelemente auch noch umbenennen. Dann k&ouml;nnen wir auf den Wert des Steuerelements sowohl &uuml;ber Me!Vorname, Me.Vorname, Me!txtVorname oder Me.txtVorname zugreifen. Und manchmal f&uuml;hrt die Syntax mit dem Punkt zu ernsthaften Verwirrungen, weshalb man in manchen F&auml;llen auf jeden Fall die Ausrufezeichen-Syntax nutzen sollte.","og_url":"https:\/\/access-im-unternehmen.de\/VBA_Punkt_oder_Ausrufezeichen\/","og_site_name":"Access im Unternehmen","article_published_time":"2023-06-17T09:32:32+00:00","author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"11\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/VBA_Punkt_oder_Ausrufezeichen\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/VBA_Punkt_oder_Ausrufezeichen\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"VBA: Punkt oder Ausrufezeichen","datePublished":"2023-06-17T09:32:32+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/VBA_Punkt_oder_Ausrufezeichen\/"},"wordCount":2015,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/VBA_Punkt_oder_Ausrufezeichen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg08.met.vgwort.de\/na\/5d7093800519425c9b77a4c44d0a783f","articleSection":["1\/2023","2023","VBA und Programmiertechniken"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/VBA_Punkt_oder_Ausrufezeichen\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/VBA_Punkt_oder_Ausrufezeichen\/","url":"https:\/\/access-im-unternehmen.de\/VBA_Punkt_oder_Ausrufezeichen\/","name":"VBA: Punkt oder Ausrufezeichen - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/VBA_Punkt_oder_Ausrufezeichen\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/VBA_Punkt_oder_Ausrufezeichen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg08.met.vgwort.de\/na\/5d7093800519425c9b77a4c44d0a783f","datePublished":"2023-06-17T09:32:32+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/VBA_Punkt_oder_Ausrufezeichen\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/VBA_Punkt_oder_Ausrufezeichen\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/VBA_Punkt_oder_Ausrufezeichen\/#primaryimage","url":"http:\/\/vg08.met.vgwort.de\/na\/5d7093800519425c9b77a4c44d0a783f","contentUrl":"http:\/\/vg08.met.vgwort.de\/na\/5d7093800519425c9b77a4c44d0a783f"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/VBA_Punkt_oder_Ausrufezeichen\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"VBA: Punkt oder Ausrufezeichen"}]},{"@type":"WebSite","@id":"https:\/\/access-im-unternehmen.de\/#website","url":"https:\/\/access-im-unternehmen.de\/","name":"Access im Unternehmen","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access","publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/access-im-unternehmen.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/access-im-unternehmen.de\/#organization","name":"Andr\u00e9 Minhorst Verlag","url":"https:\/\/access-im-unternehmen.de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/","url":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","contentUrl":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","width":370,"height":111,"caption":"Andr\u00e9 Minhorst Verlag"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","caption":"Andr\u00e9 Minhorst"}}]}},"_links":{"self":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001414","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/comments?post=55001414"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001414\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001414"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001414"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001414"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}