{"id":55001419,"date":"2023-04-01T00:00:00","date_gmt":"2023-06-17T09:30:33","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1419"},"modified":"2024-02-05T22:00:04","modified_gmt":"2024-02-05T22:00:04","slug":"formatassistent_fuer_textfelder_teil_2","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/formatassistent_fuer_textfelder_teil_2\/","title":{"rendered":"Formatassistent f&uuml;r Textfelder, Teil 2"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg08.met.vgwort.de\/na\/f377d71532c74c4886c732da4e273694\" alt=\"\" width=\"1\" height=\"1\" \/><\/p>\n<p><b>Im ersten Teil dieser Beitragsreihe haben wir einen Assistenten vorgestellt, mit dem Sie die Format-Eigenschaft von Feldern in Tabellen, Abfragen, Formularen und Berichten einstellen k\u00f6nnen. Diesem Assistenten f\u00fcgen wir noch eine weitere n\u00fctzliche Funktion hinzu. Dabei wollen wir die Daten, die in diesem Feld angezeigt werden, auslesen und im Formatassistenten anzeigen, damit der Benutzer das Ergebnis der Formatierung direkt anhand seiner eigenen Daten betrachten kann. Dazu ist, wenn wir auf die Daten der gerade angezeigten Tabelle zugreifen wollen, noch ein kleiner Trick n\u00f6tig, denn wir k\u00f6nnen nicht auf die Daten zugreifen, solange die Tabelle in der Entwurfsansicht ge\u00f6ffnet ist. Bei Abfragen, Formularen und Berichten ist dies etwas einfacher &#8211; aber sehen Sie selbst!<\/b><\/p>\n<h2>Beispieldaten aus dem Feld einer Tabelle oder Abfrage beziehen<\/h2>\n<p>Nachdem wir ein wenig mit dem Format-Assistenten experimentiert haben, fiel uns auf, dass es eigentlich keinen richtigen Spa\u00df macht, mit vorgegebenen Beispieldaten zu arbeiten beziehungsweise diese manuell anzupassen.<\/p>\n<p>Viel cooler w\u00e4re es doch, wenn wir die Daten direkt aus dem zu formatierenden Feld beziehen k\u00f6nnten. Also f\u00fcgen wir f\u00fcr die Auswahl der Beispieldaten noch eine Schaltfl\u00e4che hinzu, mit der wir ein weiteres Formular \u00f6ffnen k\u00f6nnen. Dieses soll alle Tabellen und Abfragen der aktuellen Datenbank zur Auswahl anbieten.<\/p>\n<p>Nach der Auswahl der Tabelle oder Abfrage wollen wir dann die Felder der gew\u00e4hlten Datenquelle anbieten, um aus diesen das Feld mit den zu untersuchenden Daten auszuw\u00e4hlen.<\/p>\n<p>Das Formular hei\u00dft <b>frmDatenquellenUndFeldAuswaehlen <\/b>und es enth\u00e4lt zwei Kombinationsfelder namens <b>cboTabelleOderAbfrage <\/b>und <b>cboFeld<\/b>. Zur Sicherheit sollen die Werte des gew\u00e4hlten Feldes auch noch in einem Listenfeld namens <b>lstWerte <\/b>angezeigt werden. Au\u00dferdem f\u00fcgen wir zwei Schaltfl\u00e4chen namens <b>cmdOK <\/b>und <b>cmdAbbrechen <\/b>hinzu (siehe Bild 1).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_02\/pic_1419_001.png\" alt=\"Formular zum Ausw\u00e4hlen der Daten, die in der Format-Vorschau angezeigt werden sollen\" width=\"700\" height=\"324,6625\" \/><\/p>\n<p><b><span style=\"color: darkgrey;\">Bild 1: Formular zum Ausw\u00e4hlen der Daten, die in der Format-Vorschau angezeigt werden sollen<\/span><\/b><\/p>\n<p>F\u00fcr diese hinterlegen wir jeweils eine Ereignisprozedur. Die Schaltfl\u00e4che <b>cmdOK <\/b>soll das Formular ausblenden, damit wir die gew\u00e4hlten Daten von der aufrufenden Prozedur aus auswerten k\u00f6nnen:<\/p>\n<pre><span style=\"color: blue;\">Private Sub <\/span>cmdOK_Click()\n     Me.Visible = <span style=\"color: blue;\">False<\/span>\n<span style=\"color: blue;\">End Sub<\/span><\/pre>\n<p>Die Schaltfl\u00e4che <b>cmdAbbrechen <\/b>soll das Formular einfach schlie\u00dfen:<\/p>\n<pre><span style=\"color: blue;\">Private Sub <\/span>cmdAbbrechen_Click()\n     DoCmd.Close acForm, Me.Name\n<span style=\"color: blue;\">End Sub<\/span><\/pre>\n<h2>\u00d6ffnen des Formulars zum Ausw\u00e4hlen der zu formatierenden Daten<\/h2>\n<p>Bevor wir uns die Funktion des Formulars <b>frmDatenquelleUndFeldAuswaehlen <\/b>genauer anschauen, werfen wir einen Blick auf die Schaltfl\u00e4che <b>cmdBeispielwerteEinlesen<\/b> im aufrufenden Formular <b>frmFormatassistent<\/b>, mit der wir das Formular <b>frmDatenquelleUndFeldAuswaehlen <\/b>\u00f6ffnen (siehe Bild 2).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_02\/pic_1419_002.png\" alt=\"\u00d6ffnen des Formulars frmDatenquelleUndFeldAktualisieren\" width=\"549,559\" height=\"393,8063\" \/><\/p>\n<p><b><span style=\"color: darkgrey;\">Bild 2: \u00d6ffnen des Formulars frmDatenquelleUndFeldAktualisieren<\/span><\/b><\/p>\n<p>Diese Prozedur hei\u00dft <b>cmdBeispielwerteEinlesen_Click <\/b>und ist in Listing 1 zu finden. Sie schlie\u00dft zun\u00e4chst sicherheitshalber das Formular <b>frmDatenquelleUndFeldAuswaehlen<\/b>, falls dieses noch ge\u00f6ffnet sein sollte. Der Hintergrund ist, dass nur beim erneuten \u00d6ffnen per <b>DoCmd.Open <\/b>auch die Parameter dieser Methode angewendet werden. Das Formular <b>frmDatenquelleUndFeldAuswaehlen <\/b>soll als modaler Dialog ge\u00f6ffnet werden. Au\u00dferdem wollen wir einige Informationen als \u00d6ffnungsargument \u00fcbergeben.<\/p>\n<pre><span style=\"color: blue;\">Private Sub <\/span>cmdBeispielwerteEinlesen_Click()\n     <span style=\"color: blue;\">Dim <\/span>strForm<span style=\"color: blue;\"> As String<\/span>\n     <span style=\"color: blue;\">Dim <\/span>strTabelleOderAbfrage<span style=\"color: blue;\"> As String<\/span>\n     <span style=\"color: blue;\">Dim <\/span>strFeld<span style=\"color: blue;\"> As String<\/span>\n     strForm = \"frmDatenquelleUndFeldAuswaehlen\"\n     On Error Resume <span style=\"color: blue;\">Next<\/span>\n     DoCmd.Close acForm, strForm\n     <span style=\"color: blue;\">On Error GoTo<\/span> 0\n     DoCmd.OpenForm strForm, WindowMode:=acDialog, OpenArgs:=strObject &amp; \"|\" &amp; strControl &amp; \"|\" &amp; lngObjectType\n     <span style=\"color: blue;\">If <\/span>IstFormularGeoeffnet(strForm)<span style=\"color: blue;\"> Then<\/span>\n         strTabelleOderAbfrage = Forms(strForm)!cboTabelleOderAbfrage\n         strFeld = Forms(strForm)!cboFeld\n         DoCmd.Close acForm, strForm\n     <span style=\"color: blue;\">End If<\/span>\n<span style=\"color: blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color: darkgrey;\">Listing 1: Aufruf des Formulars frmDatenquelleUndFeldAuswaehlen<\/span><\/b><\/p>\n<p>Wann immer wir hier mehr als eine Information \u00fcbermitteln, k\u00f6nnen wir diese durch das Pipe-Zeichen (<b>|<\/b>) getrennt \u00fcbergeben und diesen Ausdruck im aufgerufenen Formular wieder auseinandernehmen. In diesem Fall \u00fcbergeben wir den Namen des Objekts (also Tabelle, Abfrage, Formular oder Bericht), den Namen des Feldes beziehungsweise Steuerelements und den Objekttyp.<\/p>\n<p>Diese Informationen verarbeitet das Formular direkt in der <b>Beim \u00d6ffnen<\/b>-Ereignisprozedur &#8211; was dort geschieht, lesen Sie weiter unten. Wir schauen uns nun noch an, was nach der Eingabe der gew\u00fcnschten Daten und dem Schlie\u00dfen des Formulars <b>frmDatenquelleUndFeldAuswaehlen <\/b>durch den Benutzer in der aufrufenden Prozedur noch geschieht. Diese pr\u00fcft, ob das Formular noch ge\u00f6ffnet ist, was nur der Fall ist, wenn der Benutzer dort die <b>OK<\/b>-Schaltfl\u00e4che bet\u00e4tigt hat. Ist das der Fall, aktualisiert die Prozedur die Daten im Unterformular und schlie\u00dft dann das Formular <b>frmDatenquelleUndFeldAuswaehlen<\/b>.<\/p>\n<p>Damit kommen wir nun zur Programmierung des Formulars <b>frmDatenquellenUndFeldAuswaehlen<\/b>.<\/p>\n<h2>Tabellen und Abfragen im Kombinationsfeld anzeigen<\/h2>\n<p>F\u00fcr das F\u00fcllen der Kombinationsfelder mit den Tabellen oder Abfragen der Datenbank, von der aus wir den Assistenten aufgerufen haben, brauchen wir eine Liste der entsprechenden Elemente. Das ist insofern kompliziert, als das wir nicht einfach die Eigenschaft <b>Datensatzherkunft <\/b>auf die Tabelle <b>MSysObjects <\/b>einstellen k\u00f6nnen, die uns alle Tabellen und Abfragen liefern w\u00fcrde.<\/p>\n<p>Damit w\u00fcrden wir n\u00e4mlich auf die entsprechende Tabelle der Add-In-Datenbank zugreifen und nicht auf die der Host-Datenbank. Also erstellen wir in der gleich beschriebenen Ereignisprozedur, die durch das Ereignis <b>Beim \u00d6ffnen <\/b>des Formulars <b>frmDatenquelleUndFeldAuswaehlen <\/b>ausgel\u00f6st wird, ein Recordset auf Basis der entsprechenden Tabelle und weisen dieses dem Kombinationsfeld \u00fcber seine Eigenschaft <b>Recordset <\/b>zu.<\/p>\n<p>Als Datensatzherkunft f\u00fcr das Recordset des Steuerelements <b>cboTabelleOderAbfrage <\/b>verwenden wir die folgende Abfrage:<\/p>\n<pre>SELECT Name, Type FROM MSysObjects WHERE Type IN (1, 4, 5, 6) AND <span style=\"color: blue;\">Not<\/span> Name LIKE ''~*'' AND <span style=\"color: blue;\">Not<\/span> Name LIKE ''MSys*'' AND NOT Name LIKE ''USys*'' AND NOT Name LIKE ''f_*'' ORDER BY Name<\/pre>\n<p>Diese ermittelt die Namen und den Typ von Tabellen aller Typen (<b>1<\/b>, <b>4<\/b>, <b>6<\/b>) und von Abfragen (<b>5<\/b>). Au\u00dferdem schlie\u00dft sie Systemobjekte und einige weitere Objekte aus, f\u00fcr die der Benutzer vermutlich nicht die <b>Format<\/b>-Eigenschaft einstellen m\u00f6chte. Und die Abfrage liefert nicht nur den Objektnamen, sondern auch noch den Objekttyp des jeweiligen Datenbankobjekts.<\/p>\n<p>Insgesamt sieht die Prozedur wie in Listing 2 aus. Die Prozedur schreibt den SQL-Ausdruck f\u00fcr den Zugriff auf die Tabelle <b>MSysObjects <\/b>in die Variable <b>strSQL<\/b>. Dann erstellt sie ein Recordset auf Basis dieser Abfrage und weist dieses anschlie\u00dfend der Eigenschaft <b>Recordset <\/b>des Kombinationsfeldes <b>cboTabelleOderAbfrage <\/b>zu.<\/p>\n<pre><span style=\"color: blue;\">Private Sub <\/span>Form_Open(Cancel<span style=\"color: blue;\"> As Integer<\/span>)\n     <span style=\"color: blue;\">Dim <\/span>db<span style=\"color: blue;\"> As <\/span>DAO.Database\n     <span style=\"color: blue;\">Dim <\/span>rstTabellenUndAbfragen<span style=\"color: blue;\"> As <\/span>DAO.Recordset\n     <span style=\"color: blue;\">Dim <\/span>strSQL<span style=\"color: blue;\"> As String<\/span>\n     <span style=\"color: blue;\">Set<\/span> db = CurrentDb\n     strSQL = \"SELECT Name, Type FROM MSysObjects WHERE Type IN (1, 4, 5, 6) AND <span style=\"color: blue;\">Not<\/span> Name LIKE ''~*'' \" _\n         &amp; \"AND <span style=\"color: blue;\">Not<\/span> Name LIKE ''MSys*'' AND NOT Name LIKE ''USys*'' AND NOT Name LIKE ''f_*'' ORDER BY Name\"\n     <span style=\"color: blue;\">Set<\/span> rstTabellenUndAbfragen = db.OpenRecordset(strSQL, dbOpenDynaset)\n     <span style=\"color: blue;\">Set<\/span> Me!cboTabelleOderAbfrage.Recordset = rstTabellenUndAbfragen\n     <span style=\"color: blue;\">If <\/span><span style=\"color: blue;\">Not<\/span> IsNull(Me.OpenArgs)<span style=\"color: blue;\"> Then<\/span>\n         strObject = <span style=\"color: blue;\">Split<\/span>(Me.OpenArgs, \"|\")(0)\n         strControl = <span style=\"color: blue;\">Split<\/span>(Me.OpenArgs, \"|\")(1)\n         intObjectType = <span style=\"color: blue;\">Split<\/span>(Me.OpenArgs, \"|\")(2)\n     <span style=\"color: blue;\">End If<\/span>\n     Select Case intObjectType\n         <span style=\"color: blue;\">Case <\/span>acTable, acQuery\n             Me!cboTabelleOderAbfrage = strObject\n             FelderAktualisieren\n             Me!cboFeld = strControl\n             DatenAnzeigen\n         <span style=\"color: blue;\">Case <\/span>acForm, acReport\n             Me!cboTabelleOderAbfrage.SetFocus\n             Me!cboTabelleOderAbfrage.Dropdown\n     <span style=\"color: blue;\">End Select<\/span>\n<span style=\"color: blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color: darkgrey;\">Listing 2: Diese Prozedur wird beim \u00d6ffnen des Formulars frmDatenquellenUndFeldAuswaehlen aufgerufen.<\/span><\/b><\/p>\n<p>Danach parst sie die mit dem \u00d6ffnungsargument \u00fcbergebenen Daten. Dieses sieht beispielsweise wie folgt aus:<\/p>\n<pre>tblKunden|Eintrittsdatum|0<\/pre>\n<p>Diese Daten liest die Prozedur nun durch Aufteilen mit der <b>Split<\/b>-Funktion und anschlie\u00dfendes Abgreifen der Elemente des damit erzeugten Arrays ein und speichert sie in den Variablen <b>strObject<\/b>, <b>strControl <\/b>und <b>intObjectType<\/b>.<\/p>\n<p>Dann pr\u00fcft sie den Wert von <b>intObjectType<\/b>. Handelt es sich um eine Tabelle oder Abfrage (<b>acTable <\/b>oder <b>acQuery<\/b>), weist sie dem Kombinationsfeld cboTabelleOderAbfrage den entsprechenden Eintrag zu, also den Namen der mit dem \u00d6ffnungsargument \u00fcbergebenen Tabelle oder Abfrage.<\/p>\n<p>Dann ruft sie die Prozedur FelderAktualisieren auf, die wir gleich im Anschluss beschreiben.<\/p>\n<p>Dem Kombinationsfeld <b>cboFeld <\/b>weist die Prozedur den Namen des \u00fcbergebenen Feldes zu. Anschlie\u00dfend ruft die Prozedur die Routine <b>DatenAnzeigen <\/b>auf.<\/p>\n<p>Im Falle eines Formulars oder Berichts wird einfach das Kombinationsfeld <b>cboTabelleOderAbfrage <\/b>aktiviert und aufgeklappt.<\/p>\n<h2>Aktualisieren der auszuw\u00e4hlenden Felder<\/h2>\n<p>Damit die Datensatzherkunft des zweiten Kombinationsfelds <b>cboFeld<\/b> das mit dem \u00d6ffnungsargument \u00fcbergebene Feld \u00fcberhaupt enth\u00e4lt, m\u00fcssen diese nach der Festlegen des Eintrags im Kombinationsfeld <b>cboTabelleOderAbfrage<\/b> aktualisieren. Das erledigen wir durch den Aufruf der Prozedur <b>FelderAktualisieren <\/b>(siehe Listing 3).<\/p>\n<pre><span style=\"color: blue;\">Private Sub <\/span>FelderAktualisieren()\n     <span style=\"color: blue;\">Dim <\/span>db<span style=\"color: blue;\"> As <\/span>DAO.Database\n     <span style=\"color: blue;\">Dim <\/span>tdf<span style=\"color: blue;\"> As <\/span>DAO.TableDef\n     <span style=\"color: blue;\">Dim <\/span>qdf<span style=\"color: blue;\"> As <\/span>DAO.QueryDef\n     <span style=\"color: blue;\">Dim <\/span>fld<span style=\"color: blue;\"> As <\/span>DAO.Field\n     Me!cboFeld.RowSource = \"\"\n     <span style=\"color: blue;\">If <\/span><span style=\"color: blue;\">Not<\/span> Nz(Me!cboTabelleOderAbfrage, \"\") = 0<span style=\"color: blue;\"> Then<\/span>\n         <span style=\"color: blue;\">Set<\/span> db = CurrentDb\n         Select Case Me!cboTabelleOderAbfrage.Column(1)\n             <span style=\"color: blue;\">Case <\/span>1, 4, 6\n                 <span style=\"color: blue;\">Set<\/span> tdf = db.TableDefs(Me!cboTabelleOderAbfrage)\n                 For Each fld In tdf.Fields\n                     Me!cboFeld.AddItem fld.Name\n                 <span style=\"color: blue;\">Next<\/span> fld\n             <span style=\"color: blue;\">Case <\/span>5\n                 <span style=\"color: blue;\">Set<\/span> qdf = db.QueryDefs(Me!cboTabelleOderAbfrage)\n                 For Each fld In qdf.Fields\n                     Me!cboFeld.AddItem fld.Name\n                 <span style=\"color: blue;\">Next<\/span> fld\n         <span style=\"color: blue;\">End Select<\/span>\n     <span style=\"color: blue;\">End If<\/span>\n<span style=\"color: blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color: darkgrey;\">Listing 3: Diese Prozedur aktualisiert die im Kombinationsfeld cboFeld angezeigten Felder<\/span><\/b><\/p>\n<p>Diese leert zun\u00e4chst die Eigenschaft <b>RowSource <\/b>des Kombinationsfeldes <b>cboFeld<\/b>. Dann pr\u00fcft sie, ob im Kombinationsfeld <b>cboTabelleOderAbfrage <\/b>\u00fcberhaupt ein Objekt ausgew\u00e4hlt ist. Falls ja, pr\u00fcft die Prozedur in einer <b>Select Case<\/b>-Bedingung, ob die zweite Spalte des Kombinationsfeldes, die zwar nicht angezeigt wird, aber \u00fcber die Datensatzherkunft den Typ der Objekte enth\u00e4lt, dem Typ einer Tabelle oder Abfrage entspricht.<\/p>\n<p>Im Falle einer Tabelle weist die Prozedur der Variablen <b>tdf <\/b>ein <b>TableDefs<\/b>-Objekt auf Basis der ausgew\u00e4hlten Tabelle zu. Anschlie\u00dfend durchl\u00e4uft sie die Eintr\u00e4ge der <b>Fields<\/b>-Auflistung des <b>TableDef<\/b>-Objekts in einer <b>For Each<\/b>-Schleife und f\u00fcgt die Feldnamen mit der <b>AddItem<\/b>-Methode zum Kombinationsfeld <b>cboFeld <\/b>hinzu.<\/p>\n<p>Damit wir dies \u00fcberhaupt so machen k\u00f6nnen, stellen wir die Eigenschaft <b>Herkunftstyp <\/b>des Kombinationsfeldes auf <b>Wertliste <\/b>ein.<\/p>\n<p>Ist der gew\u00e4hlte Eintrag hingegen eine Abfrage, erstellt die Prozedur ein <b>QueryDef<\/b>-Objekt und weist diesem das entsprechende Element der <b>QueryDefs<\/b>-Auflistung zu. Dann durchl\u00e4uft sie wie bei der <b>TableDefs<\/b>-Auflistung die Felder des <b>QueryDef<\/b>-Objekts und f\u00fcgt die Felder zum Kombinationsfeld <b>cboFeld <\/b>hinzu.<\/p>\n<h2>Feld der Datenquelle ausw\u00e4hlen<\/h2>\n<p>Die oben vorgestellte Prozedur <b>FelderAktualisieren<\/b>, die direkt beim Start aufgerufen wird, soll auch dann ausgel\u00f6st werden, wenn der Benutzer eine andere Tabelle oder Abfrage aus dem Kombinationsfeld <b>cboTabelleOderAbfrage<\/b> aufruft. Daher hinterlegen wir f\u00fcr das Ereignis <b>Nach Aktualisierung <\/b>noch die folgende Ereignisprozedur:<\/p>\n<pre><span style=\"color: blue;\">Private Sub <\/span>cboTabelleOderAbfrage_AfterUpdate()\n     FelderAktualisieren\n<span style=\"color: blue;\">End Sub<\/span><\/pre>\n<p>Die Schaltfl\u00e4che <b>cmdOK <\/b>soll nur aktiviert werden, wenn der Benutzer eine Tabelle oder Abfrage und ein Feld ausgew\u00e4hlt hat. Deshalb aktivieren wir diese nach der Auswahl eines der Eintr\u00e4ge und wenn das Kombinationsfeld nicht leer ist:<\/p>\n<pre><span style=\"color: blue;\">Private Sub <\/span>cboFeld_AfterUpdate()\n     <span style=\"color: blue;\">If <\/span><span style=\"color: blue;\">Not<\/span> <span style=\"color: blue;\">Len<\/span>(Nz(Me!cboFeld)) = 0<span style=\"color: blue;\"> Then<\/span>\n         DatenAnzeigen\n         Me!cmdOK.Enabled = <span style=\"color: blue;\">True<\/span>\n     <span style=\"color: blue;\">End If<\/span>\n<span style=\"color: blue;\">End Sub<\/span><\/pre>\n<h2>Neue Beispieldaten einlesen<\/h2>\n<p>Nachdem der Benutzer die Tabelle\/Abfrage und das Feld, dessen Daten als Beispieldaten verwendet werden sollen, ausgew\u00e4hlt hat, rufen wir die Prozedur <b>DatenAnzeigen <\/b>auf (siehe Listing 4).<\/p>\n<pre><span style=\"color: blue;\">Private Sub <\/span>DatenAnzeigen()\n     <span style=\"color: blue;\">Dim <\/span>db<span style=\"color: blue;\"> As <\/span>DAO.Database\n     <span style=\"color: blue;\">Dim <\/span>dbc<span style=\"color: blue;\"> As <\/span>DAO.Database\n     <span style=\"color: blue;\">Dim <\/span>rst<span style=\"color: blue;\"> As <\/span>DAO.Recordset\n     <span style=\"color: blue;\">Dim <\/span>rstBeispiele<span style=\"color: blue;\"> As <\/span>DAO.Recordset\n     <span style=\"color: blue;\">Dim <\/span>strFeld<span style=\"color: blue;\"> As String<\/span>\n     <span style=\"color: blue;\">Dim <\/span>strBeispielfeld<span style=\"color: blue;\"> As String<\/span>\n     <span style=\"color: blue;\">Set<\/span> db = CurrentDb\n     <span style=\"color: blue;\">Set<\/span> dbc = CodeDb\n     Select Case intObjectType\n         <span style=\"color: blue;\">Case <\/span>acTable\n             <span style=\"color: blue;\">If <\/span>Me!cboTabelleOderAbfrage = strObject<span style=\"color: blue;\"> Then<\/span>\n                 DoCmd.OpenTable Me!cboTabelleOderAbfrage, acViewNormal\n             <span style=\"color: blue;\">End If<\/span>\n             <span style=\"color: blue;\">Set<\/span> rst = db.OpenRecordset(\"SELECT DISTINCT TOP 10 \" &amp; Me!cboFeld &amp; \" FROM \" &amp; Me!cboTabelleOderAbfrage _\n                 &amp; \" WHERE NOT \" &amp; Me!cboFeld &amp; \" IS NULL\", dbOpenDynaset)\n             strBeispielfeld = FeldErmitteln(rst(Me!cboFeld).Type)\n             <span style=\"color: blue;\">Set<\/span> rstBeispiele = dbc.OpenRecordset(\"SELECT \" &amp; strBeispielfeld &amp; \" FROM tblWerteFormatierteWerte\", _\n                 dbOpenDynaset)\n             <span style=\"color: blue;\">Do While<\/span> <span style=\"color: blue;\">Not<\/span> rst.EOF\n                 rstBeispiele.Edit\n                 rstBeispiele(strBeispielfeld) = rst(Me!cboFeld)\n                 rstBeispiele.Update\n                 rstBeispiele.Move<span style=\"color: blue;\">Next<\/span>\n                 rst.Move<span style=\"color: blue;\">Next<\/span>\n             <span style=\"color: blue;\">Loop<\/span>\n             rst.Close\n             <span style=\"color: blue;\">Set<\/span> rst = Nothing\n             <span style=\"color: blue;\">Set<\/span> Me!lstWerte.Recordset = rstBeispiele\n             <span style=\"color: blue;\">If <\/span>Me!cboTabelleOderAbfrage = strObject<span style=\"color: blue;\"> Then<\/span>\n                 DoCmd.OpenTable Me!cboTabelleOderAbfrage, acViewDesign\n             <span style=\"color: blue;\">End If<\/span>\n         <span style=\"color: blue;\">Case <\/span>acQuery\n             ''...\n     <span style=\"color: blue;\">End Select<\/span>\n<span style=\"color: blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color: darkgrey;\">Listing 4: Aktualisierung der Beispieldaten<\/span><\/b><\/p>\n<p>Diese soll die ersten zehn Datens\u00e4tze aus dem entsprechenden Feld in das passende Feld der Tabelle <b>tblWerteFormatierteWerte <\/b>eintragen, welche die Daten f\u00fcr den Formatassistenten selbst liefert (siehe Bild 3).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_02\/pic_1419_003.png\" alt=\"Tabelle mit Beispieldaten f\u00fcr den Formatassistenten\" width=\"649,559\" height=\"258,4979\" \/><\/p>\n<p><b><span style=\"color: darkgrey;\">Bild 3: Tabelle mit Beispieldaten f\u00fcr den Formatassistenten<\/span><\/b><\/p>\n<p>Dazu deklariert und initialisiert die Prozedur zwei <b>Database<\/b>-Variablen &#8211; eine f\u00fcr die aktuelle Datenbank (<b>db<\/b>) und eine f\u00fcr die Add-In-Datenbank (<b>dbc<\/b>). Dann pr\u00fcft sie in einer <b>Select Case<\/b>-Bedingung, ob eine Tabelle oder eine Abfrage die neuen Beispieldaten liefern soll. Im Falle einer Tabelle kann es entweder sein, dass der Formatassistent von der Entwurfsansicht einer Tabelle aus ge\u00f6ffnet wurde. Wenn wir nun die Daten aus einem Feld dieser Tabelle einlesen wollen, m\u00fcssten wir diese kurz in der Datenblattansicht \u00f6ffnen, da wir nicht auf die Daten einer Tabelle zugreifen k\u00f6nnen, solange diese in der Entwurfsansicht ge\u00f6ffnet ist. Es kann aber auch sein, dass der Benutzer eine andere Tabelle aus dem Kombinationsfeld ausgew\u00e4hlt hat &#8211; in diesem Fall ist der Schritt nicht n\u00f6tig.<\/p>\n<p>Wir pr\u00fcfen also per <b>If&#8230;Then<\/b>-Bedingung, ob die Tabelle, deren Format-Eigenschaft wir \u00e4ndern wollen, mit der Tabelle identisch ist, welche im Kombinationsfeld ausgew\u00e4hlt wurde. Falls ja, \u00f6ffnen wir die Tabelle in der Datenblattansicht. Die gleiche Abfrage folgt nach dem Einlesen der Beispieldaten erneut, um die Tabelle wieder in der Entwurfsansicht zu \u00f6ffnen &#8211; nur so k\u00f6nnen wir die \u00fcber den Assistenten ge\u00e4nderte Formateigenschaft wieder zur\u00fcck in die Tabelle schreiben.<\/p>\n<p>Nachdem dies gekl\u00e4rt ist, \u00f6ffnen wir ein Recordset auf Basis der im Kombinationsfeld <b>cboTabelleOderAbfrage <\/b>ausgew\u00e4hlten Tabelle oder Abfrage. Das Recordset soll nur die Werte des Feldes liefern, das wir im Kombinationsfeld <b>cboFeld <\/b>ausgew\u00e4hlt haben. Au\u00dferdem wollen wir nur die ersten zehn Datens\u00e4tze selektieren und nur eindeutige Feldwerte und verwenden daher das Schl\u00fcsselwort <b>DISTINCT TOP 10<\/b>.<\/p>\n<p>Wir m\u00fcssen au\u00dferdem noch herausfinden, in welches der Felder der Tabelle <b>tblWerteFormatierteWerte <\/b>wir die neuen Beispieldaten \u00fcberhaupt eintragen wollen &#8211; <b>WertText<\/b>, <b>WertDatum<\/b>, <b>WertZahl<\/b>, <b>WertBoolean<\/b>, <b>WertWaehrung <\/b>oder <b>WertZahlMitKomma<\/b>. Dazu rufen wir die Hilfsfunktion <b>FeldErmitteln <\/b>auf und \u00fcbergeben den Datentyp des Feldes, den wir zuvor \u00fcber die <b>Type<\/b>-Eigenschaft des <b>Field<\/b>-Objekts ermitteln.<\/p>\n<p>Den in die Variable <b>strBeispielfeld <\/b>geschriebenen Namen des zu verwendenden Feldes verwenden wir dann, um ein Recordset auf Basis der Tabelle <b>tblWerteFormatierteWerte <\/b>zu \u00f6ffnen. Wir durchlaufen nun alle Datens\u00e4tze des Recordsets mit den neuen Beispielwerten und schreiben diese in das aktuelle Recordset der Tabelle <b>tblWerteFormatierteWerte<\/b>. Anschlie\u00dfend weisen wir dem Listenfeld <b>lstWerte <\/b>das Recordset <b>rstBeispiele <\/b>zu. Danach \u00f6ffnet die Prozedur die bearbeitete Tabelle gegebenenfalls wieder in der Entwurfsansicht. Falls wir die <b>Format<\/b>-Eigenschaft des Feldes einer Abfrage bearbeiten, landen wir in der <b>Select Case<\/b>-Bedingung im zweiten Zweig mit dem Wert <b>acQuery<\/b>.<\/p>\n<p>Dieser erledigt die gleichen Schritte wie der <b>acTable<\/b>-Zweig &#8211; mit dem Unterschied, dass wir die Tabelle oder Abfrage, welche die Beispieldaten liefern soll, direkt \u00f6ffnen k\u00f6nnen und keine R\u00fccksicht auf eine eventuell in der Entwurfsansicht ge\u00f6ffnete und nicht verf\u00fcgbare Tabelle nehmen m\u00fcssen.<\/p>\n<p>Nachdem wir die Tabelle und das Feld ausgew\u00e4hlt haben, das die neuen Beispieldaten f\u00fcr den Formatassistenten liefern soll, k\u00f6nnen wir den Dialog schlie\u00dfen und uns zur\u00fcck im Formatassistenten um das Einstellen der Format-Eigenschaft k\u00fcmmern.<\/p>\n<h2>Ermitteln des Zielfeldes f\u00fcr die Beispieldaten<\/h2>\n<p>Es fehlt noch die Funktion, mit der wir auf Basis des Datentyps des mit einem neuen Format zu versehenden Feldes das entsprechende Feld der Tabelle <b>tblWerteFormatierteWerte <\/b>ermitteln. Diese sieht wie folgt aus und untersucht den mit dem Parameter <b>intDataType <\/b>gelieferten Wert in einer <b>Select Case<\/b>-Bedingung. Diese gibt den Namen des Feldes f\u00fcr den jeweiligen Felddatentyp zur\u00fcck &#8211; f\u00fcr den Typ <b>dbDate <\/b>beispielsweise <b>WertDatum<\/b>:<\/p>\n<pre><span style=\"color: blue;\">Private Function <\/span>FeldErmitteln(lngDataType<span style=\"color: blue;\"> As Long<\/span>) _\n        <span style=\"color: blue;\"> As String<\/span>\n     <span style=\"color: blue;\">Dim <\/span>strFeld<span style=\"color: blue;\"> As String<\/span>\n     Select Case lngDataType\n         <span style=\"color: blue;\">Case <\/span>dbDate\n             strFeld = \"WertDatum\"\n         <span style=\"color: blue;\">Case <\/span>dbText\n             strFeld = \"WertText\"\n         <span style=\"color: blue;\">Case <\/span>dbInteger, dbLong\n             strFeld = \"WertZahl\"\n         <span style=\"color: blue;\">Case <\/span>dbDouble, dbSingle\n             strFeld = \"WertZahlMitKomma\"\n         <span style=\"color: blue;\">Case <\/span>dbCurrency\n             strFeld = \"WertWaehrung\"\n         <span style=\"color: blue;\">Case <\/span>dbBoolean\n             strFeld = \"WertBoolean\"\n     <span style=\"color: blue;\">End Select<\/span>\n     FeldErmitteln = strFeld\n<span style=\"color: blue;\">End Function<\/span><\/pre>\n<h2>Nutzung des Formatassistenten<\/h2>\n<p>Zum Abschluss noch einmal eine Beschreibung der M\u00f6glichkeiten des Formatassistenten, der gerade Einsteigern beim Formatieren von Datumsfeldern wertvolle Dienste leisten kann. Der Ausgangspunkt ist der Wunsch des Entwicklers, ein spezielles Format f\u00fcr ein Feld zu definieren, beispielsweise f\u00fcr ein Datumsfeld wie in Bild 4. Nach der Installation des Add-Ins aus dieser Beitragsreihe finden wir nach dem Anklicken der Format-Eigenschaft eines Feldes die abgebildete Schaltfl\u00e4che mit den drei Punkten vor.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_02\/pic_1419_004.png\" alt=\"Aufrufen des Formatassistenten\" width=\"424,5589\" height=\"344,7821\" \/><\/p>\n<p><b><span style=\"color: darkgrey;\">Bild 4: Aufrufen des Formatassistenten<\/span><\/b><\/p>\n<p>Diese \u00f6ffnet den Formatassistenten, der die M\u00f6glichkeit zur Eingabe des Formatausdrucks in englisch oder deutsch erlaubt und direkt das Ergebnis der Formatierung anzeigt (siehe Bild 5)<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_02\/pic_1419_005.png\" alt=\"Der Formatassistent im Einsatz\" width=\"424,5589\" height=\"350,2611\" \/><\/p>\n<p><b><span style=\"color: darkgrey;\">Bild 5: Der Formatassistent im Einsatz<\/span><\/b><\/p>\n<p>Wenn die im Formatassistenten angezeigten Beispieldaten nicht ausreichen, um das Format optimal einzustellen, kann man aus den Tabellen oder Abfragen der aktuellen Datenbank auch noch eigene Beispieldaten angeben. Dazu klickt man einfach auf die Schaltfl\u00e4che <b>Werte aus Tabellenfeld als Beispiel einlesen<\/b> und \u00f6ffnet so den Dialog aus Bild 6. Hier w\u00e4hlt man eine Tabelle und ein Feld aus der aktuellen Datenbank aus, um neue Beispieldaten zu erhalten.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_02\/pic_1419_006.png\" alt=\"Dialog zum Festlegen der Datenquelle \u00f6ffnen\" width=\"499,5589\" height=\"357,5042\" \/><\/p>\n<p><b><span style=\"color: darkgrey;\">Bild 6: Dialog zum Festlegen der Datenquelle \u00f6ffnen<\/span><\/b><\/p>\n<p>Zur\u00fcck im Assistenten kann man diese Daten dann wie gew\u00fcnscht formatieren (siehe Bild 7).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_02\/pic_1419_008.png\" alt=\"Ein ausgefeiltes Datumsformat\" width=\"424,5589\" height=\"350,2611\" \/><\/p>\n<p><b><span style=\"color: darkgrey;\">Bild 7: Ein ausgefeiltes Datumsformat<\/span><\/b><\/p>\n<p>Nach dem Schlie\u00dfen des Assistenten landet das angegebene Format schlie\u00dflich in der Eigenschaft des Feldes in der Entwurfsansicht der Tabelle (siehe Bild 8).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_02\/pic_1419_009.png\" alt=\"Das Datumsformat in der Zieltabelle\" width=\"424,5589\" height=\"330,8251\" \/><\/p>\n<p><b><span style=\"color: darkgrey;\">Bild 8: Das Datumsformat in der Zieltabelle<\/span><\/b><\/p>\n<h2>Zusammenfassung und Ausblick<\/h2>\n<p>Im zweiten Teil dieser Beitragsreihe haben wir den Formatassistenten noch um eine Funktion erweitert, mit welcher der Benutzer die f\u00fcr die Formatierung zu verwenden Beispieldaten selbst ausw\u00e4hlen kann. Damit haben wir nun ein Werkzeug, um direkt an den gew\u00fcnschten Daten das ben\u00f6tigte Format auszuprobieren und festzulegen.<\/p>\n<h2>Downloads zu diesem Beitrag<\/h2>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>amvFormatAssistent.accda<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/CB2B265F-5ED7-4174-863C-CE4104D05112\/aiu_1419.zip\">Download<\/a><\/p>\n\n\n\t\n\t<form id=\"rcp_login_form\"  class=\"rcp_form\" method=\"POST\" action=\"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001419\/\">\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=\"\/data\/wp\/v2\/posts\/55001419?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-im-unternehmen.de\/data\/wp\/v2\/posts\/55001419\/\"\/>\n\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"eb6809c847\"\/>\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\n","protected":false},"excerpt":{"rendered":"<p>Access liefert standardm&auml;&szlig;ig bereits einige Assistenten mit. F&uuml;r die Format-Eigenschaft jedoch liefert es nur ein Auswahlfeld mit einigen voreingestellten Optionen wie verschiedneen Zeit-, Zahlen und Boolean-Formaten. Diese dienen durchaus als gute Beispiele, wie man selbst Formatierungen vornehmen kann, aber wenn man sich dann an diese Aufgabe begibt, wird schnell ein ziemliches Experimentieren daraus. Um diesen Teil zu vereinfachen, wollen wir Sie mit einem Assistenten unterst&uuml;tzen. Dieser soll direkt &uuml;ber das Eingabefenster f&uuml;r die Format-Eigenschaft ge&ouml;ffnet werden und die M&ouml;glichkeit bieten, verschiedene Werte einzugeben und diese mit dem ge&uuml;nwschten  Formatierungsausdruck zu testen. Und nat&uuml;rlich finden Sie in diesem Beitrag die Anleitung, wie Sie den Assistenten selbst erstellen k&ouml;nnen!<\/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":[66022023,662023,44000027],"tags":[],"class_list":["post-55001419","post","type-post","status-publish","format-standard","hentry","category-66022023","category-662023","category-Loesungen"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Formatassistent f&uuml;r Textfelder, Teil 2 - 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\/formatassistent_fuer_textfelder_teil_2\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Formatassistent f&uuml;r Textfelder, Teil 2\" \/>\n<meta property=\"og:description\" content=\"Access liefert standardm&auml;&szlig;ig bereits einige Assistenten mit. F&uuml;r die Format-Eigenschaft jedoch liefert es nur ein Auswahlfeld mit einigen voreingestellten Optionen wie verschiedneen Zeit-, Zahlen und Boolean-Formaten. Diese dienen durchaus als gute Beispiele, wie man selbst Formatierungen vornehmen kann, aber wenn man sich dann an diese Aufgabe begibt, wird schnell ein ziemliches Experimentieren daraus. Um diesen Teil zu vereinfachen, wollen wir Sie mit einem Assistenten unterst&uuml;tzen. Dieser soll direkt &uuml;ber das Eingabefenster f&uuml;r die Format-Eigenschaft ge&ouml;ffnet werden und die M&ouml;glichkeit bieten, verschiedene Werte einzugeben und diese mit dem ge&uuml;nwschten Formatierungsausdruck zu testen. Und nat&uuml;rlich finden Sie in diesem Beitrag die Anleitung, wie Sie den Assistenten selbst erstellen k&ouml;nnen!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/formatassistent_fuer_textfelder_teil_2\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2023-06-17T09:30:33+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-02-05T22:00:04+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg08.met.vgwort.de\/na\/f377d71532c74c4886c732da4e273694\" \/>\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=\"14\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/formatassistent_fuer_textfelder_teil_2\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/formatassistent_fuer_textfelder_teil_2\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Formatassistent f&uuml;r Textfelder, Teil 2\",\"datePublished\":\"2023-06-17T09:30:33+00:00\",\"dateModified\":\"2024-02-05T22:00:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/formatassistent_fuer_textfelder_teil_2\\\/\"},\"wordCount\":2243,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/formatassistent_fuer_textfelder_teil_2\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/f377d71532c74c4886c732da4e273694\",\"articleSection\":[\"2\\\/2023\",\"2023\",\"L\u00f6sungen\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/formatassistent_fuer_textfelder_teil_2\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/formatassistent_fuer_textfelder_teil_2\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/formatassistent_fuer_textfelder_teil_2\\\/\",\"name\":\"Formatassistent f&uuml;r Textfelder, Teil 2 - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/formatassistent_fuer_textfelder_teil_2\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/formatassistent_fuer_textfelder_teil_2\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/f377d71532c74c4886c732da4e273694\",\"datePublished\":\"2023-06-17T09:30:33+00:00\",\"dateModified\":\"2024-02-05T22:00:04+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/formatassistent_fuer_textfelder_teil_2\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/formatassistent_fuer_textfelder_teil_2\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/formatassistent_fuer_textfelder_teil_2\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/f377d71532c74c4886c732da4e273694\",\"contentUrl\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/f377d71532c74c4886c732da4e273694\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/formatassistent_fuer_textfelder_teil_2\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Formatassistent f&uuml;r Textfelder, Teil 2\"}]},{\"@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":"Formatassistent f&uuml;r Textfelder, Teil 2 - 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\/formatassistent_fuer_textfelder_teil_2\/","og_locale":"de_DE","og_type":"article","og_title":"Formatassistent f&uuml;r Textfelder, Teil 2","og_description":"Access liefert standardm&auml;&szlig;ig bereits einige Assistenten mit. F&uuml;r die Format-Eigenschaft jedoch liefert es nur ein Auswahlfeld mit einigen voreingestellten Optionen wie verschiedneen Zeit-, Zahlen und Boolean-Formaten. Diese dienen durchaus als gute Beispiele, wie man selbst Formatierungen vornehmen kann, aber wenn man sich dann an diese Aufgabe begibt, wird schnell ein ziemliches Experimentieren daraus. Um diesen Teil zu vereinfachen, wollen wir Sie mit einem Assistenten unterst&uuml;tzen. Dieser soll direkt &uuml;ber das Eingabefenster f&uuml;r die Format-Eigenschaft ge&ouml;ffnet werden und die M&ouml;glichkeit bieten, verschiedene Werte einzugeben und diese mit dem ge&uuml;nwschten Formatierungsausdruck zu testen. Und nat&uuml;rlich finden Sie in diesem Beitrag die Anleitung, wie Sie den Assistenten selbst erstellen k&ouml;nnen!","og_url":"https:\/\/access-im-unternehmen.de\/formatassistent_fuer_textfelder_teil_2\/","og_site_name":"Access im Unternehmen","article_published_time":"2023-06-17T09:30:33+00:00","article_modified_time":"2024-02-05T22:00:04+00:00","og_image":[{"url":"http:\/\/vg08.met.vgwort.de\/na\/f377d71532c74c4886c732da4e273694","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"14\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/formatassistent_fuer_textfelder_teil_2\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/formatassistent_fuer_textfelder_teil_2\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Formatassistent f&uuml;r Textfelder, Teil 2","datePublished":"2023-06-17T09:30:33+00:00","dateModified":"2024-02-05T22:00:04+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/formatassistent_fuer_textfelder_teil_2\/"},"wordCount":2243,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/formatassistent_fuer_textfelder_teil_2\/#primaryimage"},"thumbnailUrl":"http:\/\/vg08.met.vgwort.de\/na\/f377d71532c74c4886c732da4e273694","articleSection":["2\/2023","2023","L\u00f6sungen"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/formatassistent_fuer_textfelder_teil_2\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/formatassistent_fuer_textfelder_teil_2\/","url":"https:\/\/access-im-unternehmen.de\/formatassistent_fuer_textfelder_teil_2\/","name":"Formatassistent f&uuml;r Textfelder, Teil 2 - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/formatassistent_fuer_textfelder_teil_2\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/formatassistent_fuer_textfelder_teil_2\/#primaryimage"},"thumbnailUrl":"http:\/\/vg08.met.vgwort.de\/na\/f377d71532c74c4886c732da4e273694","datePublished":"2023-06-17T09:30:33+00:00","dateModified":"2024-02-05T22:00:04+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/formatassistent_fuer_textfelder_teil_2\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/formatassistent_fuer_textfelder_teil_2\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/formatassistent_fuer_textfelder_teil_2\/#primaryimage","url":"http:\/\/vg08.met.vgwort.de\/na\/f377d71532c74c4886c732da4e273694","contentUrl":"http:\/\/vg08.met.vgwort.de\/na\/f377d71532c74c4886c732da4e273694"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/formatassistent_fuer_textfelder_teil_2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Formatassistent f&uuml;r Textfelder, Teil 2"}]},{"@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\/55001419","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=55001419"}],"version-history":[{"count":2,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001419\/revisions"}],"predecessor-version":[{"id":88075194,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001419\/revisions\/88075194"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001419"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001419"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001419"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}