{"id":55000548,"date":"2008-02-01T00:00:00","date_gmt":"2021-02-11T21:19:26","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=548"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Upsizing_von_Access_nach_SQL_Server_Tabellen","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Upsizing_von_Access_nach_SQL_Server_Tabellen\/","title":{"rendered":"Upsizing von Access nach SQL Server: Tabellen"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg06.met.vgwort.de\/na\/c1ca5703e61645a384fd0d014868f0a6\" width=\"1\" height=\"1\" alt=\"\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p><b>Wenn sich mal wieder ein Access-Einsteiger in einem Forum oder einer Newsgroup nach M&ouml;glichkeiten erkundigt, das Aussehen des mit der MsgBox-Funktion angezeigten Meldungsfensters anzupassen, gibt es nur ein m&uuml;des L&auml;cheln und den Hinweis, dass man sich da wohl schon auf die Hinterbeine setzen und ein eigenes Meldungsfenster bauen m&uuml;sse &#8211; nat&uuml;rlich als Formular. Diese Arbeit nehmen wir Ihnen nun ab &#8211; mit dem Access-im-Unternehmen-Meldungsfenster.<\/b><\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p><\/div>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<div class=\"story\">\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Meldungsfenster braucht man wirklich oft, und entgegen dem Namen dient es ja nicht nur zur Anzeige von Meldungen, sondern auch zum Realisieren einfacher Dialoge. So stellen Meldungsfenster nicht nur die <b>OK<\/b>-Schaltfl&auml;che zum Schlie&szlig;en der Meldung bereit, sondern auch noch einige andere Kombinationen wie <b>OK <\/b>und <b>Abbrechen <\/b>oder <b>Ja <\/b>und <b>Nein<\/b>. Und da <b>MsgBox <\/b>nicht nur eine Methode, sondern &#8211; wie einleitend erw&auml;hnt &#8211; eine Funktion ist, liefert es auch einen R&uuml;ckgabewert, der einer Konstanten f&uuml;r die vom Benutzer ausgew&auml;hlten Schaltfl&auml;chen entspricht und ganz einfach ausgewertet werden kann.<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Nun haben Entwickler und Anwender manchmal sehr spezielle Anforderungen und W&uuml;nsche, die sich hier und da auch auf die Gestaltung des Meldungsfensters beziehen. In der Tat liefert dieses nur m&auml;&szlig;ige M&ouml;glichkeiten der Anpassung und diese beschr&auml;nken sich auf die Auswahl des angezeigten Symbols, des Meldungstextes, des Fenstertitels und der zur Verf&uuml;gung stehenden Schaltfl&auml;chen. Selbst die Breite des Meldungsfensters kann nur &uuml;ber die breiteste Textzeile beeinflusst werden.<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Wer also etwa auf sehbehinderte Benutzer R&uuml;cksicht nehmen und mit einer entsprechenden Schriftgr&ouml;&szlig;e aufwarten m&ouml;chte, kommt mit dem herk&ouml;mmlichen Meldungsfenster nicht weit &#8211; au&szlig;er, er stellt die Schriftgr&ouml;&szlig;e direkt systemweit um (<b>Systemsteuerung|Anzeige|Darstellung|Schriftgrad<\/b>).<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Also legen Sie selbst Hand an und bauen Ihr eigenes Meldungsfenster.<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p><b>Gleicher Aufruf, anderes Meldungsfenster<\/b><\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Der Clou bei der <b>MsgBox<\/b>-Funktion ist der folgende: Sie k&ouml;nnen eine eigene &ouml;ffentliche Funktion namens <b>MsgBox <\/b>programmieren und damit die eingebaute <b>MsgBox<\/b>-Funktion &uuml;berschreiben. Probieren Sie es einfach einmal mit der folgenden einfachen Funktion aus:<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>Public Function MsgBox()<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Debug.Print &quot;MsgBox &uuml;berschrieben&quot;<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>End Function<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Wenn Sie nun im Direktfenster den Befehl <b>MsgBox <\/b>absetzen, erscheint dort lediglich der erwartete Text:<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>MsgBox<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>MsgBox &uuml;berschrieben<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Nat&uuml;rlich fehlt zum <b>MsgBox<\/b>-Ersatz noch einiges mehr, aber Sie k&ouml;nnen das Meldungsfenster, das Sie auf den folgenden Seiten kennen lernen, zumindest auch nachtr&auml;glich in bestehende Anwendungen einbauen und davon profitieren.<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p><b>Funktionen des selbst gebauten <br \/>Meldungsfensters<\/b><\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Was soll Ihr eigenes Meldungsfenster nun bieten, was das vorherige nicht konnte Es gibt da eine Menge M&ouml;glichkeiten:<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<ul>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<li class=\"aufz-hlung\">Auswahl eigener Hintergrund- und Textfarben<\/li>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<li class=\"aufz-hlung\">Auswahl neuer Symbole<\/li>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<li class=\"aufz-hlung\">Andere Schriftart und -gr&ouml;&szlig;e<\/li>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<li class=\"aufz-hlung\">Gemischte Formatierung<\/li>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/ul>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Die Hintergrund- und Textfarben k&ouml;nnen Sie entweder, wie nachfolgend als einfachere Variante vorgestellt, direkt in das als Meldungsfenster missbrauchte Formular einstellen. Es gibt nat&uuml;rlich auch die M&ouml;glichkeit, solche und andere Informationen in einer Optionen-Tabelle oder an anderer Stelle zu speichern und vom Benutzer &uuml;ber einen Optionen-Dialog einstellen zu lassen. Letzteres w&uuml;rde jedoch den Rahmen hier sprengen, sodass wir es bei dem Einstellen einer anwendungsweiten Farbe f&uuml;r Schrift und Hintergrund belassen.<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Statt der &uuml;blicherweise verwendeten Symbole wie jene aus Bild 1 k&ouml;nnen Sie also durchaus eigene Symbole einsetzen. Im vorliegenden Falle nehmen wir allerdings mit den &uuml;blichen Symbolen vorlieb.<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<div class=\"image\">\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img decoding=\"async\" src=\"Meldungsfenster-web-images\/pic003_opt.jpeg\" alt=\"pic003.tif\" \/><br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/div>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<div class=\"story\">\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1: Die Symbole des Meldungsfensters<\/span><\/b><\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p><\/div>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Mit Schriftart und -gr&ouml;&szlig;e verh&auml;lt es sich wie mit den Farben: Sie k&ouml;nnen diese vom Benutzer einstellen lassen oder aber eigene Einstellungen vorgeben &#8211; auch hier verwenden wir aus Gr&uuml;nden der &uuml;bersicht die einfachere Variante.<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Fehlt noch die gemischte Formatierung: Es ist klar, dass man f&uuml;r v&ouml;llig flexible Formatierungen ein RTF-Steuerelement oder das in Access 2007 neu eingef&uuml;hrte Richtext-Feld verwenden m&uuml;sste. Dies ist aber nicht das Ziel: Ein Meldungsfenster soll den Benutzer kurz &uuml;ber einen Sachverhalt informieren beziehungsweise eine Entscheidung &uuml;ber die weitere Vorgehensweise einholen und keine Sammlung bunter und verschieden formatierter Buchstaben sein.<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Was v&ouml;llig in Ordnung ist und bis Access 97 auch m&ouml;glich war, ist der Einsatz einer fett gedruckten ersten Zeile als &uuml;berschrift. In Access 97 wurde diese erste Zeile von den folgenden durch das Klammeraffe-Zeichen (@) getrennt, auch weitere Zeilenumbr&uuml;che mit nachfolgender Leerzeile konnten hiermit eingef&uuml;gt werden. Diese M&ouml;glichkeiten soll auch unser Meldungsfenster nachbilden.<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p><b>Aussehen des Meldungsfensters<\/b><\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Als Meldungsfenster verwenden Sie ein einfaches Formular. Dieses versorgen Sie mit folgenden Steuerelementen:<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<ul>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<li class=\"aufz-hlung\"><b>picCritical<\/b>, <b>picExclamation<\/b>, <b>picInformation<\/b>, <b>picQuestion<\/b>: Bildsteuerelemente, die Eigenschaften <b>Links <\/b>und <b>Oben <\/b>erhalten den Wert <b>0,2cm<\/b>.<\/li>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<li class=\"aufz-hlung\"><b>lblHeader<\/b>: Bezeichnungsfeld f&uuml;r die &uuml;berschrift, Schriftbreite: <b>Fett<\/b><\/li>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<li class=\"aufz-hlung\"><b>lblText<\/b>: Bezeichnungsfeld f&uuml;r den eigentlichen Text<\/li>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<li class=\"aufz-hlung\"><b>cmd1<\/b>, <b>cmd2<\/b>, <b>cmd3<\/b>: Schaltfl&auml;chen, die nach Bedarf eingeblendet und mit verschiedenen Texten beschriftet werden. Das Formular selbst soll <b>frmMsgBox <\/b>hei&szlig;en. Stellen Sie dort die Eigenschaften <b>Bildlaufleisten<\/b>, <b>Datensatzmarkierer<\/b>, <b>Navigationsschaltfl&auml;chen <\/b>und <b>Trennlinien <\/b>auf <b>Nein <\/b>ein. Die Schaltfl&auml;chen platzieren Sie im Fu&szlig;bereich des Formulars.<\/li>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/ul>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Die Gr&ouml;&szlig;e und Position der Bezeichnungsfelder und der Schaltfl&auml;chen ist zun&auml;chst unerheblich, diese Eigenschaften werden sp&auml;ter per Code an den enthaltenen Text angepasst. Stellen Sie jedoch die Sichtbarkeit der Schaltfl&auml;chen mit der Eigenschaft <b>Visible <\/b>auf <b>False <\/b>ein. Au&szlig;erdem sollten Sie die Eigenschaft <b>Textausrichtung <\/b>der beiden Bezeichnungsfelder auf <b>Zentriert <\/b>setzen.<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p><b>Bilder hinzuf&uuml;gen<\/b><\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>F&uuml;r die Symbole f&uuml;gen Sie einfach vier Bildsteuerelemente hinzu und f&uuml;llen diese mit Bilddateien in entsprechender Hintergrundfarbe &#8211; in der Beispieldatenbank sind diese wei&szlig;.<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p><b>Die Schaltfl&auml;chen<\/b><\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Das selbst gebaute Meldungsfenster soll die gleichen Schaltfl&auml;chen-Kombinationen bieten wie das Original-Meldungsfenster. Bild 2 zeigt im &uuml;berblick, welche Konstante welche Schaltfl&auml;chenkombination erzeugt. Z&auml;hlt man einmal durch, kommt man auf sechs verschiedene Schaltfl&auml;chen: <b>Abbrechen<\/b>, <b>Ignorieren<\/b>, <b>Ja<\/b>, <b>Nein<\/b>, <b>OK <\/b>und <b>Wiederholen<\/b>.<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Maximal zeigt ein Meldungsfenster jedoch nur drei Schaltfl&auml;chen gleichzeitig an &#8211; vier, wenn man die m&ouml;gliche Hilfe-Schaltfl&auml;che mitz&auml;hlt (diese lassen wir jedoch weg &#8211; einen Meldungstext sollte man schon so formulieren, dass der Benutzer die f&uuml;r ihn richtige Schaltfl&auml;che intuitiv ausw&auml;hlt). Wie viele Schaltfl&auml;chen legen wir also an Es gibt zwei naheliegende Varianten:<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<ul>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<li class=\"aufz-hlung\">Sie legen f&uuml;r jeden Befehl eine eigene Schaltfl&auml;che an und blenden jeweils die nicht ben&ouml;tigten Schaltfl&auml;chen aus. Der Vorteil ist, dass man die Antwort des Benutzers direkt anhand der angeklickten Schaltfl&auml;che ermitteln kann. <\/li>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<li class=\"aufz-hlung\">Sie legen nur so viele Schaltfl&auml;chen an, wie gleichzeitig angezeigt werden sollen. L&auml;sst man die Hilfe-Schaltfl&auml;che weg, w&auml;ren dies drei. Da die Bezeichnungen der Schaltfl&auml;chen generisch w&auml;ren, m&uuml;sste man die Bedeutung der jeweiligen Schaltfl&auml;che entweder aus der dynamisch zugewiesenen Beschriftung entnehmen oder man schreibt die Antwortkonstante irgendwo anders hin &#8211; beispielsweise in die <b>Tag<\/b>-Eigenschaft der Schaltfl&auml;che.<\/li>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/ul>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Die hier zum Einsatz kommende Variante haben wir schon vorweggenommen &#8211; wir setzen auf die Minimalanzahl an Schaltfl&auml;chen, n&auml;mlich drei.<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p><b>Aufruf des Meldungsfensters<\/b><\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Um das Formular als alternatives Meldungsfenster aufzurufen, brauchen Sie eine &ouml;ffentliche Funktion namens <b>MsgBox<\/b>, die genau die gleichen Parameter wie die eigentliche Funktion liefert.<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Dass Sie nicht alle Parameter auswerten (<b>HelpFile <\/b>und <b>Context <\/b>bleiben au&szlig;en vor), spielt keine Rolle; aus Kompatibilit&auml;tsgr&uuml;nden m&uuml;ssen diese Parameter aber zumindest in der Parameterliste der Funktion enthalten sein, damit bereits in einer Anwendung vorhandene Aufrufe keine Fehler ausl&ouml;sen.<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Die folgende Funktion pr&uuml;ft zun&auml;chst, ob der Parameter <b>Title<\/b> angegeben wurde, und legt gegebenenfalls einen eigenen Fenstertitel fest. Danach steht dem &ouml;ffnen des Formulars als modaler Dialog nichts mehr im Wege. Einzige Aufgabe dieses Aufrufs ist es, die Parameter mit dem OpenArgs-Argument zu &uuml;bergeben, was in Form einer durch das Pipe-Zeichen (|) getrennten Zeichenkette geschieht. Diese enth&auml;lt den Zahlenwert f&uuml;r die Konstanten (Schaltfl&auml;chen, Symbol, Standardschaltfl&auml;che), die Meldung sowie den Fenstertitel.<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>Function MsgBox(Prompt, Optional Buttons _<br \/> As VbMsgBoxStyle = vbOKOnly, _<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Optional Title, _<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Optional HelpFile, _<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Optional Context) As VbMsgBoxResult<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> On Error Resume Next<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> If IsMissing(Title) Then Title = _<br \/> &quot;Access im Unternehmen-Meldungsfenster&quot;<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> DoCmd.OpenForm &quot;frmMsgbox&quot;, , , , , _<br \/> acDialog, CStr(Buttons) &amp; &quot;|&quot; _<br \/> &amp; CStr(Prompt) &amp; &quot;|&quot; &amp; CStr(Title)<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> MsgBox = Forms!frmMsgbox.RetVal<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> DoCmd.Close acForm, &quot;frmMsgbox&quot;<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>End Function<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Damit der Benutzer auch die m&ouml;glichen Konstanten per IntelliSense vorgesetzt bekommt, deklarieren Sie den Parameter <b>Buttons <\/b>einfach als <b>VbMsgBoxStyle <\/b>&#8211; das ist der gleiche Datentyp (eine Enumeration), der auch von der Original-<b>MsgBox<\/b>-Anweisung verwendet wird (siehe Bild 3).<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Der Hintergrund, warum das MsgBox-Formular mit dem Parameter <b>WindowMode:=acDialog <\/b>aufgerufen werden soll, ist folgender: Erstens soll das Formular wie das Original den Fokus erhalten und den Zugriff auf die anderen Elemente der Anwendung verhindern, solange es ge&ouml;ffnet ist.<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Und zweitens gibt es ja einen Antwortwert: die durch den Benutzer angeklickte Schaltfl&auml;che, die von der <b>MsgBox<\/b>-Funktion ausgewertet und zur&uuml;ckgegeben werden muss.<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Und damit kommen wir direkt zur Funktion des Meldungsfenster-Formulars selbst: Die Schaltfl&auml;chen sollen es n&auml;mlich nicht schlie&szlig;en, sondern nur unsichtbar machen, damit die aufrufende Funktion noch die gedr&uuml;ckte Schaltfl&auml;che ermitteln kann.<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p class=\"zwischen-berschrift-oberer-spaltenrand\">Funktionen des Meldungsfenster-Formulars<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Der Gro&szlig;teil der Funktionen des Meldungsfensters l&auml;uft beim &ouml;ffnen des Formulars ab. Ist es n&auml;mlich einmal mit dem richtigen Symbol, den Texten und den passenden Schaltfl&auml;chen best&uuml;ckt, braucht es nur noch das Anklicken einer der Schaltfl&auml;chen durch den Benutzer auszuwerten.<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Die Routine, die durch das Ereignis <b>Beim &ouml;ffnen <\/b>des Formulars ausgel&ouml;st wird, ist dementsprechend relativ lang. Sie k&ouml;nnen diese in der Beispieldatenbank in voller L&auml;nge begutachten. Im Folgenden beschreiben wir die einzelnen darin enthaltenen Funktionen.<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p><b>&ouml;ffnungsargumente auseinandernehmen<\/b><\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Die erste Aufgabe ist es, die in einem zusammengesetzten Ausdruck und durch das Pipe-Zeichen (|) getrennten Parameter auseinanderzunehmen und entsprechenden Variablen zuzuordnen. Dazu schreibt die Routine zun&auml;chst die in der Eigenschaft <b>OpenArgs <\/b>des Formulars enthaltene Zeichenkette in eine passende Variable:<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>Dim strOpenArgs As String<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>strOpenArgs = CStr(Nz(Me.OpenArgs))<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Es kann passieren, dass ein Benutzer das Formular <b>frmMsgBox<\/b> direkt aus dem Datenbankfenster heraus aufruft. In dem Fall wird kein &ouml;ffnungsargument &uuml;bergeben, was auf einfache Weise erm&ouml;glicht, das Formular erst gar nicht anzuzeigen:<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>If Len(strOpenArgs) = 0 Then<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Cancel = True<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Exit Sub<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>End If<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Dabei fragt die obige Bedingung einfach ab, ob <b>strOpenArgs <\/b>einen Wert (<b>Variant<\/b>) mit einer L&auml;nge gr&ouml;&szlig;er 0 enth&auml;lt und bricht in diesem Fall den &ouml;ffnungsvorgang ab; in allen anderen F&auml;llen l&auml;uft die Routine weiter.<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Die drei folgenden Variablen nehmen direkt anschlie&szlig;end die einzelnen Bestandteile des &ouml;ffnungsarguments auf:<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>Dim MsgConst As VbMsgBoxStyle<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>Dim strMsg As String<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>Dim strTitle As String<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br \/>\n<!--30percent--><\/p>\n<p>Beachten Sie, dass <b>MsgConst <\/b>wie bereits im Funktionsparameter von <b>MsgBox <\/b>den Datentyp <b>VbMsgBoxStyle<\/b> (<b>Long<\/b>) hat.<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Beim Auseinandernehmen des &ouml;ffnungsarguments hilft dann die <b>Split<\/b>-Funktion, die eine Zeichenkette an einem Trennzeichen &#8211; hier am Pipe-Zeichen &#8211; teilt und in ein Array schreibt. Dieses wird hier gar nicht erst gespeichert, sondern direkt &uuml;ber die jeweilige Elementnummer (<b>0<\/b>, <b>1 <\/b>und <b>2<\/b>) referenziert und in die passenden Variablen geschrieben:<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>MsgConst = Val(Split(strOA, &quot;|&quot;)(0))<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>strMsg = CStr(Split(strOA, &quot;|&quot;)(1))<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>strTitle = Split(strOA, &quot;|&quot;)(2)<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p class=\"zwischen-berschriftnachquellcode\">&uuml;berschrift oder nicht<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Der n&auml;chste interessante Punkt ist, ob der Benutzer eine &uuml;berschrift in seinem Meldungsfenster haben m&ouml;chte. Dazu muss er, wie weiter oben erw&auml;hnt und auch im Original-Meldungsfenster bis Access 97 m&ouml;glich, die &uuml;berschrift durch ein At-Zeichen (@) vom Rest des Meldungstextes trennen. Dies geschieht, indem zun&auml;chst eine Variable die Position eines eventuell vorhandenen @ speichert:<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>Dim intPosSplitter As Integer<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>intPosSplitter = InStr(1, strMsg, &quot;@&quot;)<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Die <b>InStr<\/b>-Funktion liefert in dem Fall einen Wert gr&ouml;&szlig;er <b>0 <\/b>zur&uuml;ck, was sich folgende <b>If&#8230;Then<\/b>-Abfrage zu Nutze macht (ist der Wert <b>0<\/b>, folgt Plan B: keine &uuml;berschrift!). Dort landen die einzelnen Bestandteile dann in den String-Variablen <b>strHeader <\/b>und <b>strText<\/b>. Behandelt werden die Zeichenketten allerdings zuvor auch noch, und zwar durch die Funktion <b>NarrowText<\/b> (s. Beitrag <b>Zeichenketten zerkleinern<\/b>, Shortlink 560). Diese teilt die Zeichenkette in jeweils maximal 80 Zeichen lange St&uuml;cke auf. Und zus&auml;tzlich, damit die Freunde der alten <b>MsgBox<\/b>-Funktion von Access 97 vollends zu ihrem Recht kommen, werden im eigentlichen Meldungstext weitere @-Zeichen zu Zeilenumbr&uuml;chen inklusive Leerzeile umgeformt:<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>intPosSplitter = InStr(1, strMsg, &quot;@&quot;)<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>If intPosSplitter &gt; 0 Then<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> strHeader = NarrowText(CStr(Split(strMsg, _<br \/> &quot;@&quot;)(0)))<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Was bei der &uuml;berschrift noch leicht war, n&auml;mlich einfach den Teil der Meldung vor dem ersten @-Zeichen auszulesen, wird beim folgenden Teil schon schwieriger, denn es k&ouml;nnen ja noch beliebig viele @-Zeichen folgen und entsprechende Zeilenumbr&uuml;che markieren.<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Dem wird die folgende <b>For&#8230;Next<\/b>-Schleife gerecht, die alle Elemente des Arrays durchl&auml;uft, das durch die <b>Split<\/b>-Funktion erzeugt wird &#8211; bis auf eines, n&auml;mlich das erste. Das wurde ja bereits f&uuml;r die &uuml;berschrift abgezweigt:<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>For i = LBound(Split(strMsg, &quot;@&quot;)) + 1 _<br \/> To UBound(Split(strMsg, &quot;@&quot;))<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> strText = strText &amp; Split(strMsg, &quot;@&quot;)(i) _<br \/> &amp; vbCrLf<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>Next i<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Der so gewonnene Text enth&auml;lt mindestens ein abschlie&szlig;endes Zeilenumbruchzeichen. Die folgende <b>Do While<\/b>-Schleife entfernt eines oder mehrere Zeilenumbruchzeichen am Ende der Zeichenkette:<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>Do While Right(strText, 2) = Chr(13) &amp; Chr(10)<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> strText = Mid(strText, 1, Len(strText) - 2)<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>Loop<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Schlie&szlig;lich wird der Text noch zurechtgestutzt, was die Funktion <b>NarrowText <\/b>erledigt:<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>strText = NarrowText(strText)<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Die extrahierten Texte f&uuml;r die &uuml;berschrift werden dann dem Steuerelement <b>lblHeader <\/b>zugewiesen; gleichzeitig wird dieses sichtbar gemacht (die Zuweisung des Textes an das Bezeichnungsfeld <b>lblText <\/b>folgt sp&auml;ter):<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>Me!lblHeader.Visible = True<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>Me!lblHeader.Caption = strHeader<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Sollte der Meldungstext kein @-Zeichen enthalten, legt die Routine nur ein einfaches Meldungsfenster ohne &uuml;berschrift an. Der Meldungstext wird dann einfach durch die Funktion <b>NarrowText <\/b>geschickt (das Zuweisen an das Beschriftungsfeld erfolgt au&szlig;erhalb der <b>If&#8230;Then<\/b>-Bedingung):<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>strText = NarrowText(strMsg)<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>Me!lblHeader.Visible = False<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Schlie&szlig;lich sorgt die folgende Anweisung im Anschluss an die <b>If&#8230;Then<\/b>-Bedingung daf&uuml;r, dass auch der eigentliche Meldungstext im passenden Bezeichnungsfeld <b>lblText <\/b>erscheint:<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>Me!lblText.Caption = strText<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p class=\"zwischen-berschriftnachquellcode\">Abmessungen der Textfelder<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Durch unterschiedliche Textl&auml;ngen kann es passieren, dass die Bezeichnungsfelder in ihrer urspr&uuml;nglichen H&ouml;he nicht ausreichen. In dem Fall sollen diese und nat&uuml;rlich auch das Formular an die ben&ouml;tigte H&ouml;he angepasst werden. Wie aber erh&auml;lt man die H&ouml;he, die eine bestimmte Zeichenkette ben&ouml;tigt<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Dazu verwenden wir die Funktion <b>GetTextSize<\/b>, die der Beitrag <b>Platzbedarf f&uuml;r Texte ermitteln <\/b>(Shortlink 562) beschreibt &#8211; sie liefert die x- und die y-Ma&szlig;e eines durch den angegebenen Text aufgespannten Vierecks.<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>F&uuml;r die Ermittlung dieser Ma&szlig;e ben&ouml;tigen Sie die notwendigen Eigenschaften der Bezeichnungsfelder wie etwa Schriftart oder Schriftgr&ouml;&szlig;e, die in den folgenden Variablen gespeichert werden &#8211; je vier f&uuml;r die &uuml;berschrift und den eigentlichen Meldungstext:<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>Dim strFontnameText As String<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>Dim lngFontsizeText As Long<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>Dim bolFontBoldText As Boolean<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>Dim bolFontItalicText As Boolean<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>Dim strFontnameHeader As String<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>Dim lngFontsizeHeader As Long<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>Dim bolFontBoldHeader As Boolean<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>Dim bolFontItalicHeader As Boolean<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Diese Variablen werden mit den entsprechenden Eigenschaften der Steuerelemente gef&uuml;llt &#8211; hier nur f&uuml;r die Eigenschaften von <b>lblHeader<\/b>:<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>strFontnameHeader = Me!lblHeader.FontName<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>lngFontsizeHeader = Me!lblHeader.FontSize<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>bolFontBoldHeader = Me!lblHeader.FontBold<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>bolFontItalicHeader = Me!lblHeader.FontItalic<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Nachdem die Texte extrahiert und die Eigenschaften f&uuml;r die Bezeichnungsfelder ermittelt sind, lesen die folgenden beiden Anweisungen (die erste ist in der bereits weiter oben beschriebenen <b>If&#8230;Then<\/b>-Bedingung eingebaut, damit sie nur ausgel&ouml;st wird, wenn die Meldung auch eine &uuml;berschrift enth&auml;lt) die Abma&szlig;e der Bezeichnungsfelder ein:<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>Dim vExtentText As TSize<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>Dim vExtentHeader As TSize<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>vExtentHeader = GetTextSize(strHeader, _<br \/> strFontnameHeader, lngFontsizeHeader, _<br \/> bolFontBoldHeader, bolFontItalicHeader)<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>vExtentText = GetTextSize(strText, _<br \/> strFontnameText, lngFontsizeText, _<br \/> bolFontBoldText, bolFontItalicText)<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p class=\"zwischen-berschriftnachquellcode\">Symbole anzeigen<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Das Anzeigen des richtigen Symbols ist einfach: Sie legen einfach vier Bildsteuerelemente an und f&uuml;llen diese mit je einem Symbol. Alle vier erhalten die gleiche Gr&ouml;&szlig;e und Position; somit ist nur jeweils eines sichtbar.<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Damit das richtige Symbol angezeigt wird, wird dessen Eigenschaft <b>Visible <\/b>auf <b>True <\/b>eingestellt, die gleiche Eigenschaft aller anderen auf <b>False<\/b>. Daf&uuml;r sorgen die folgenden vier Zeilen, die als Faktor f&uuml;r die Anzeige eines Bildes den Vergleich der jeweiligen Symbolkonstanten mit einer logischen Konjunktion der &uuml;bergebenen Konstanten und einer bestimmten Bitmaske verwendet &#8211; mehr dazu im Beitrag <b>Rund um Bin&auml;rzahlen <\/b>(Shortlink 556):<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>Me!picCritical.Visible = _<br \/> (vbCritical = (MsgConst And &amp;HF0))<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>Me!picExclamation.Visible = _<br \/> (vbExclamation = (MsgConst And &amp;HF0))<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>Me!picInformation.Visible = _<br \/> (vbInformation = (MsgConst And &amp;HF0))<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>Me!picQuestion.Visible = _<br \/> (vbQuestion = (MsgConst And &amp;HF0))<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Diese Vorgehensweise sorgt auch f&uuml;r den Fall vor, dass gar kein Bild angezeigt werden soll: Dann sind halt einfach alle Bildsteuerelemente unsichtbar.<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Ob &uuml;berhaupt ein Symbol angezeigt wird, muss die Routine auch noch abfragen: Falls nicht, kann der Meldungstext nat&uuml;rlich viel weiter links platziert werden.<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Da alle Konstanten f&uuml;r die Symbole gr&ouml;&szlig;er 0 sind, reicht die folgende Zeile aus, um eine Bool&apos;sche Variable mit dem passenden Wert zu f&uuml;llen &#8211; nebst Deklaration, versteht sich:<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>Dim bolpic As Boolean<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>bolpic = (MsgConst And &amp;HF0) &gt; 0<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p class=\"zwischen-berschriftnachquellcode\">Meldungsfenster-Arrangement<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Der komplizierteste Teil ist das Ausrichten und Ein- beziehungsweise Ausblenden der Steuerelemente sowie das Festlegen der Gr&ouml;&szlig;e des Formulars selbst. Bevor man damit anf&auml;ngt, muss man sich erst einmal &uuml;berlegen, wie das Gesamtbild ausschauen soll:<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<ul>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<li class=\"aufz-hlung\">Wenn ein Symbol angezeigt wird, soll es sich links oben befinden.<\/li>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<li class=\"aufz-hlung\">Rechts daneben liegt, soweit vorhanden, das Bezeichnungsfeld mit der &uuml;berschrift, darunter das mit dem Meldungstext.<\/li>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<li class=\"aufz-hlung\">Wenn kein Symbol angezeigt wird, sollen die beiden Bezeichnungsfelder am linken Rand beginnen.<\/li>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<li class=\"aufz-hlung\">Die Bezeichnungsfelder zeigen ihren Text zentriert an.<\/li>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<li class=\"aufz-hlung\">Die Schaltfl&auml;che(n) befinden sich am unteren Rand, genau genommen im Fu&szlig;bereich des Formulars. Dies erlaubt eine einfache Zuweisung einer alternativen Hintergrundfarbe.<\/li>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<li class=\"aufz-hlung\">Die Schaltfl&auml;chen sollen horizontal zentriert sein: Wenn nur eines angezeigt wird, befindet es sich genau in der Mitte, zwei befinden sich mit gleichem Abstand links und rechts von einer gedachten Mittellinie und bei drei Schaltfl&auml;chen ordnen sich zwei davon um die in der Mitte befindliche Schaltfl&auml;che an.<\/li>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<li class=\"aufz-hlung\">Bei der Anordnung soll f&uuml;r die meisten Abst&auml;nde ein konstanter Wert verwendet werden &#8211; dies bezieht sich etwa auf den Abstand der Steuerelemente zum Seitenrand und untereinander.<\/li>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/ul>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p class=\"zwischen-berschriftnachquellcode\">Konstante f&uuml;r Abst&auml;nde<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Die folgende Konstante enth&auml;lt den Abstand, der zwischen Steuerelementen und Seitenr&auml;ndern eingehalten werden soll:<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>Const clngD As Long = 100<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p class=\"zwischen-berschriftnachquellcode\">Vertikale Ausrichtung der Beschriftungsfelder<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Die oben bereits besprochene <b>If&#8230;Then<\/b>-Bedingung, innerhalb derer die Texte f&uuml;r die Bezeichnungsfelder ermittelt und eingetragen werden, leistet noch mehr &#8211; n&auml;mlich die vertikale Ausrichtung der Bezeichnungsfelder.<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Die folgenden Codezeilen kennzeichnen die hierf&uuml;r wichtigen Ausschnitte dieser <b>If&#8230;Then<\/b>-Bedingung und einiger unmittelbar danach folgender Anweisungen.<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Zun&auml;chst ermittelt die Funktion <b>GetTextSize <\/b>die Abmessung des Textes aus <b>strHeader<\/b>, woraufhin die Routine das Bezeichnungsfeld <b>lblHeader <\/b>entsprechend dimensioniert und auch den Abstand vom oberen Formularrand einstellt. Das Gleiche geschieht im zweiten Zweig der Bedingung f&uuml;r das dann allein stehende Bezeichnungsfeld <b>lblText<\/b>. Die Position dieses Textfeldes h&auml;ngt ma&szlig;geblich vom Vorhandensein des &uuml;berschriftsfeldes ab, weshalb der dadurch beanspruchte Platz (H&ouml;he des Bezeichnungsfeldes plus dessen Abstand zum oberen Formularrand) in der Variablen <b>lngHeightHeader <\/b>gespeichert wird.<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>If intPosSplitter &gt; 0 Then<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> ... Texte ermittelt, siehe weiter oben<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> vExtentHeader = GetTextSize(strHeader, _<br \/> strFontnameHeader, lngFontsizeHeader, _<br \/> bolFontBoldHeader, bolFontItalicHeader)<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Me!lblHeader.Height = vExtentHeader.y * 1.2<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Me!lblHeader.Width = vExtentHeader.x<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Me!lblHeader.Top = clngD<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> lngHeightHeader = clngD + Me!lblHeader.Height<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>Else<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> ... Text ermittelt, siehe weiter oben<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Me!lblText.Top = clngD<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>End If<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Danach kommt erneut die Funktion <b>GetTextSize <\/b>zum Zuge und ermittelt noch die Ma&szlig;e des eigentlichen Meldungstextes.<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Die vertikale Position folgt aus dem Wert der Variablen <b>lngHeightHeader<\/b>, die bei Vorhandensein des Bezeichnungsfeldes mit der &uuml;berschrift gef&uuml;llt ist und sonst den Wert <b>0 <\/b>hat:<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>vExtentText = GetTextSize(strText, _<br \/> strFontnameText, lngFontsizeText, _<br \/> bolFontBoldText, bolFontItalicText)<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>Me!lblText.Top = lngHeightHeader + clngD<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>Me!lblText.Height = vExtentText.y * 1.2<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>Me!lblText.Width = vExtentText.x<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p class=\"zwischen-berschriftnachquellcode\">Horizontales Ausrichten der <br \/>Beschriftungsfelder<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Das obere Beschriftungsfeld soll links oben angeordnet sein, falls ein Symbol angezeigt wird, rechts daneben. Sollten zwei Beschriftungsfelder n&ouml;tig sein, wird das untere in passendem Abstand unter dem oberen Beschriftungsfeld angeordnet.<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Die ersten beiden Zeilen zum Ermitteln des Vorhandenseins eines Symbols kennen Sie schon, danach wird in einer <b>If&#8230;Then<\/b>-Bedingung der f&uuml;r das Symbol zus&auml;tzlich notwendige Platz in die Variable <b>lngWidthIcon <\/b>geschrieben.<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Die &uuml;brigen Anweisungen stellen daraufhin erst die Breite des kompletten Formulars ein (<b>Me.InnerWidth<\/b>), wobei diese mindestens 4.000 Twips beansprucht.<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Die maximale Breite h&auml;ngt von der Breite des breiteren der beiden Bezeichnungsfelder plus doppeltem Wert der Konstanten <b>cLngD <\/b>plus gegebenenfalls der f&uuml;r das Symbol ben&ouml;tigten Breite ab.<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>Dim bolpic As Boolean<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>bolpic = (MsgConst And &amp;HF0) &gt; 0<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>If bolpic Then<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> lngWidthIcon = clngD + Me!picCritical.Width<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>End If<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>Me.InsideWidth = clngD + lngWidthIcon + _<br \/> Largest(vExtentText.x * 1.2, _<br \/> vExtentHeader.x * 1.2, 4000)<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>Me!lblHeader.Left = clngD + lngWidthIcon<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>Me!lblText.Left = clngD + lngWidthIcon<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>Me!lblHeader.Width = Me.InsideWidth _<br \/> - 2 * clngD - lngWidthIcon<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>Me!lblText.Width = Me!lblHeader.Width<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p class=\"zwischen-berschrift-oberer-spaltenrand\">Schaltfl&auml;chen einblenden<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Die Schaltfl&auml;chen bringen Sie im Fu&szlig;bereich des Formulars unter. Die horizontale Ausrichtung wird wie oben besprochen in Abh&auml;ngigkeit der anzuzeigenden Schaltfl&auml;chen vorgenommen, die vertikale Ausrichtung sowie die Gr&ouml;&szlig;e legen Sie im Vorhinein fest. Dies kann etwa wie in Bild 4 aussehen. Damit die Routine die Schaltfl&auml;chen nur nach Bedarf einzublenden braucht, aber nicht ausblenden muss, stellen Sie deren Sichtbarkeit mit der Eigenschaft <b>Sichtbar <\/b>auf den Wert <b>Nein <\/b>ein.<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Je nachdem, welche Schaltfl&auml;chenkonstante der Aufruf des Meldungsfensters enth&auml;lt, m&uuml;ssen eine oder mehrere der drei Schaltfl&auml;chen erstens eingeblendet, zweitens mit der passenden Beschriftung ausgestattet und drittens mit einem Antwortwert versehen werden, der &#8211; wie schon erw&auml;hnt &#8211; in der <b>Tag<\/b>-Eigenschaft der jeweiligen Schaltfl&auml;che Platz findet. Die folgenden Codezeilen ermitteln mittels logischer Konjunktion, welche Schaltfl&auml;chenkonstante vorliegt, und nehmen die Konfiguration der Schaltfl&auml;chen vor.<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>Select Case (MsgConst And &amp;HF)<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Case vbOKOnly<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Me.cmd1.Visible = True<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Me.cmd1.Caption = &quot;OK&quot;<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Me.cmd1.Tag = vbOK<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Case vbYesNo<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Me.cmd1.Visible = True<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Me.cmd1.Caption = &quot;Ja&quot;<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Me.cmd1.Tag = vbYes<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Me.cmd2.Visible = True<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Me.cmd2.Caption = &quot;Nein&quot;<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Me.cmd2.Tag = vbNo<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Case vbYesNoCancel<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Me.cmd1.Visible = True<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Me.cmd1.Caption = &quot;Ja&quot;<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Me.cmd1.Tag = vbYes<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Me.cmd2.Visible = True<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Me.cmd2.Caption = &quot;Nein&quot;<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Me.cmd2.Tag = vbNo<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Me.cmd3.Visible = True<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Me.cmd3.Caption = &quot;Abbrechen&quot;<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Me.cmd3.Tag = vbCancel<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Case vbOKCancel<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Me.cmd1.Visible = True<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Me.cmd1.Caption = &quot;OK&quot;<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Me.cmd1.Tag = vbOK<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Me.cmd2.Visible = True<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Me.cmd2.Caption = &quot;Abbrechen&quot;<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Me.cmd2.Tag = vbCancel<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Case vbRetryCancel<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Me.cmd1.Visible = True<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Me.cmd1.Caption = &quot;Wiederholen&quot;<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Me.cmd1.Tag = vbRetry<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Me.cmd2.Visible = True<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Me.cmd2.Caption = &quot;Abbrechen&quot;<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Me.cmd2.Tag = vbCancel<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Case vbAbortRetryIgnore<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Me.cmd1.Visible = True<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Me.cmd1.Caption = &quot;Abbrechen&quot;<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Me.cmd1.Tag = vbCancel<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Me.cmd2.Visible = True<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Me.cmd2.Caption = &quot;Wiederholen&quot;<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Me.cmd2.Tag = vbRetry<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Me.cmd3.Visible = True<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Me.cmd3.Caption = &quot;Ignorieren&quot;<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Me.cmd3.Tag = vbIgnore<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>End Select<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p class=\"zwischen-berschriftnachquellcode\">Position der Schaltfl&auml;chen<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Die Position der Schaltfl&auml;chen h&auml;ngt davon ab, wie viele sichtbar sind und welche Breite das Formular hat. Die folgenden Zeilen pr&uuml;fen zun&auml;chst, ob die Schaltfl&auml;che <b>cmd3 <\/b>sichtbar ist, die durch den obigen Code nur eingeblendet wird, wenn alle drei Schaltfl&auml;chen ben&ouml;tigt werden. Ist das der Fall, werden alle drei Schaltfl&auml;chen ausgerichtet, sonst pr&uuml;ft die Routine, ob die Schaltfl&auml;che <b>cmd2 <\/b>sichtbar ist, was auf das Vorhandensein zweier Schaltfl&auml;chen hinweisen und eine entsprechende Ausrichtung nach sich ziehen w&uuml;rde. Ist auch diese Schaltfl&auml;che nicht sichtbar, besitzt das Meldungsfenster nur eine Schaltfl&auml;che, die dann ganz einfach in der Mitte positioniert wird.<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>F&uuml;r das Positionieren geht die Routine in allen drei F&auml;llen von der horizontalen Mitte des Formulars aus, die sie mit dem Ausdruck <b>Me.InsideWidth \/ 2 <\/b>ermittelt. Hiervon subtrahiert sie die halbe Breite der Schaltfl&auml;che <b>cmd2<\/b> und erh&auml;lt somit den Abstand dieser Schaltfl&auml;che vom linken Rand des Formulars (siehe Bild 5).<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>If Me.cmd3.Visible = True Then<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Me.cmd2.Left = _<br \/> Me.InsideWidth \/ 2 - Me.cmd2.Width \/ 2<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Me.cmd1.Left = _<br \/> Me.cmd2.Left - Me.cmd1.Width - clngD<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Me.cmd3.Left = _<br \/> Me.cmd2.Left + Me.cmd2.Width + clngD<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>ElseIf Me.cmd2.Visible = True Then<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Me.cmd1.Left = Me.InsideWidth \/ 2 _<br \/> - Me.cmd1.Width - clngD \/ 2<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Me.cmd2.Left = Me.InsideWidth \/ 2 + clngD \/ 2<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>Else<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Me.cmd1.Left = Me.InsideWidth \/ 2 _<br \/> - Me.cmd1.Width \/ 2<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>End If<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p class=\"zwischen-berschriftnachquellcode\">Ergebnis abfragen<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Wenn das Meldungsfenster ein Ergebnis liefern soll, das anschlie&szlig;end weiterverarbeitet werden kann, sieht der Aufruf beispielsweise so aus und gibt in diesem Falle je nach gedr&uuml;ckter Schaltfl&auml;che den Wert <b>vbYes <\/b>oder <b>vbNo <\/b>zur&uuml;ck:<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>Debug.Print MsgBox(&quot;Frage&quot;, vbYesNo)<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Diesen Wert soll die beim Klicken der jeweiligen Schaltfl&auml;che ausgel&ouml;ste Ereignisprozedur in die folgende &ouml;ffentlich deklarierte Variable schreiben:<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>Private m_ret As VbMsgBoxResult<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>Property Get RetVal() As Long<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> RetVal = m_ret<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>End Property<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Dieser Wert wird von der <b>MsgBox<\/b>-Funktion nach dem Fokusverlust des Formulars &#8211; also dem Unsichtbarmachen &#8211; mit der folgenden Anweisung ausgelesen:<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>MsgBox = Forms!frmMsgbox.RetVal<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Die <b>Beim Klicken<\/b>-Ereigniseigenschaften des Meldungsfenster-Formulars sehen so aus &#8211; hier nur die Prozedur f&uuml;r die Schaltfl&auml;che <b>cmd1<\/b>, die anderen sind &auml;hnlich aufgebaut:<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>Private Sub cmd1_Click()<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> m_ret = Val(Me!cmd1.Tag)<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre> Me.Visible = False<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<pre>End Sub<\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p class=\"zwischen-berschriftnachquellcode\">Zusammenfassung und Ausblick<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Ein benutzerdefiniertes Meldungsfenster er&ouml;ffnet mehr M&ouml;glichkeiten als das eingebaute. Sie k&ouml;nnen es um weitere Funktionen beziehungsweise Schaltfl&auml;chen erweitern oder alternative Symbole hinzuf&uuml;gen. Wichtig ist auch die M&ouml;glichkeit, die Schaltfl&auml;chen im Falle von mehrsprachigen Anwendungen anwendungsgesteuert beschriften zu k&ouml;nnen und sich nicht auf die Einstellungen der jeweiligen Access-Version verlassen zu m&uuml;ssen.<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p>Um das Meldungsfenster in eigenen Anwendungen einzusetzen, brauchen Sie nur das Formular <b>frmMsgBox <\/b>sowie das Modul <b>mdlMsgBox <\/b>in die Zielanwendung zu kopieren. Bestehende <b>MsgBox<\/b>-Anweisungen arbeiten von nun an mit dem eingebauten Meldungsfenster-Formular, was bis auf wenige Ausnahmen problemlos funktioniert: Wie oben erw&auml;hnt, werden etwa die Parameter zur &uuml;bergabe einer Hilfedatei nicht ausgewertet. Dies f&uuml;hrt aber nicht zu einem Fehler.<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img decoding=\"async\" src=\"Meldungsfenster-web-images\/pic001_opt.jpeg\" alt=\"pic001.tif\" \/><br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img decoding=\"async\" src=\"Meldungsfenster-web-images\/pic002_opt.jpeg\" alt=\"pic002.tif\" \/><br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img decoding=\"async\" src=\"Meldungsfenster-web-images\/pic004_opt.jpeg\" alt=\"pic004.tif\" \/><br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img decoding=\"async\" src=\"Meldungsfenster-web-images\/pic005_opt.jpeg\" alt=\"pic005.wmf\" \/><br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img decoding=\"async\" src=\"Meldungsfenster-web-images\/pic005_opt1.jpeg\" alt=\"pic005.tif\" \/><\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>Migration.mdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/D4082CF9-5DE5-461B-8679-8091785D6BFA\/aiu_548.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#8222;Access ist eine Hausfrauen-Datenbank!&#8220; &#8211; das ist eine oft und gern genutzte Phrase zur Verunglimpfung von Access-Datenbanken und ihren Entwicklern. Aber man kann diese Aussage auch positiv sehen und als Kompliment auffassen. Immerhin sorgt eine Hausfrau daf&uuml;r, dass alles gepflegt und in Ordnung gehalten wird. Genau das macht Access auch. Es ist sehr tolerant und nimmt dem Entwickler viel Arbeit ab. Das ist bei einem gr&ouml;&szlig;eren Datenbanksystem wie dem SQL Server bei Weitem nicht der Fall. Der SQL Server ist weitaus penibler und l&auml;sst dem Entwickler auch nicht allzu viel durchgehen. Hier muss der Entwickler selbst daf&uuml;r sorgen, dass alles ordentlich ist und bleibt. Genau dieser Aspekt sorgt nach der Migration einer Access-Datenbank zu einer SQL Server-Datenbank immer wieder f&uuml;r &Uuml;berraschungen. Das f&auml;ngt schon mit den einfachsten Dingen an &#8211; den Tabellen.<\/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":[66012008,662008,44000022],"tags":[],"class_list":["post-55000548","post","type-post","status-publish","format-standard","hentry","category-66012008","category-662008","category-SQL_Server_und_Co"],"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>Upsizing von Access nach SQL Server: Tabellen - 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\/Upsizing_von_Access_nach_SQL_Server_Tabellen\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Upsizing von Access nach SQL Server: Tabellen\" \/>\n<meta property=\"og:description\" content=\"&quot;Access ist eine Hausfrauen-Datenbank!&quot; - das ist eine oft und gern genutzte Phrase zur Verunglimpfung von Access-Datenbanken und ihren Entwicklern. Aber man kann diese Aussage auch positiv sehen und als Kompliment auffassen. Immerhin sorgt eine Hausfrau daf&uuml;r, dass alles gepflegt und in Ordnung gehalten wird. Genau das macht Access auch. Es ist sehr tolerant und nimmt dem Entwickler viel Arbeit ab. Das ist bei einem gr&ouml;&szlig;eren Datenbanksystem wie dem SQL Server bei Weitem nicht der Fall. Der SQL Server ist weitaus penibler und l&auml;sst dem Entwickler auch nicht allzu viel durchgehen. Hier muss der Entwickler selbst daf&uuml;r sorgen, dass alles ordentlich ist und bleibt. Genau dieser Aspekt sorgt nach der Migration einer Access-Datenbank zu einer SQL Server-Datenbank immer wieder f&uuml;r &Uuml;berraschungen. Das f&auml;ngt schon mit den einfachsten Dingen an - den Tabellen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Upsizing_von_Access_nach_SQL_Server_Tabellen\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2021-02-11T21:19:26+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg06.met.vgwort.de\/na\/c1ca5703e61645a384fd0d014868f0a6\" \/>\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=\"46\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Upsizing_von_Access_nach_SQL_Server_Tabellen\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Upsizing_von_Access_nach_SQL_Server_Tabellen\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Upsizing von Access nach SQL Server: Tabellen\",\"datePublished\":\"2021-02-11T21:19:26+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Upsizing_von_Access_nach_SQL_Server_Tabellen\\\/\"},\"wordCount\":8477,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Upsizing_von_Access_nach_SQL_Server_Tabellen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/c1ca5703e61645a384fd0d014868f0a6\",\"articleSection\":[\"1\\\/2008\",\"2008\",\"SQL Server und Co.\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Upsizing_von_Access_nach_SQL_Server_Tabellen\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Upsizing_von_Access_nach_SQL_Server_Tabellen\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Upsizing_von_Access_nach_SQL_Server_Tabellen\\\/\",\"name\":\"Upsizing von Access nach SQL Server: Tabellen - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Upsizing_von_Access_nach_SQL_Server_Tabellen\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Upsizing_von_Access_nach_SQL_Server_Tabellen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/c1ca5703e61645a384fd0d014868f0a6\",\"datePublished\":\"2021-02-11T21:19:26+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Upsizing_von_Access_nach_SQL_Server_Tabellen\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Upsizing_von_Access_nach_SQL_Server_Tabellen\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Upsizing_von_Access_nach_SQL_Server_Tabellen\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/c1ca5703e61645a384fd0d014868f0a6\",\"contentUrl\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/c1ca5703e61645a384fd0d014868f0a6\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Upsizing_von_Access_nach_SQL_Server_Tabellen\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Upsizing von Access nach SQL Server: Tabellen\"}]},{\"@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":"Upsizing von Access nach SQL Server: Tabellen - 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\/Upsizing_von_Access_nach_SQL_Server_Tabellen\/","og_locale":"de_DE","og_type":"article","og_title":"Upsizing von Access nach SQL Server: Tabellen","og_description":"\"Access ist eine Hausfrauen-Datenbank!\" - das ist eine oft und gern genutzte Phrase zur Verunglimpfung von Access-Datenbanken und ihren Entwicklern. Aber man kann diese Aussage auch positiv sehen und als Kompliment auffassen. Immerhin sorgt eine Hausfrau daf&uuml;r, dass alles gepflegt und in Ordnung gehalten wird. Genau das macht Access auch. Es ist sehr tolerant und nimmt dem Entwickler viel Arbeit ab. Das ist bei einem gr&ouml;&szlig;eren Datenbanksystem wie dem SQL Server bei Weitem nicht der Fall. Der SQL Server ist weitaus penibler und l&auml;sst dem Entwickler auch nicht allzu viel durchgehen. Hier muss der Entwickler selbst daf&uuml;r sorgen, dass alles ordentlich ist und bleibt. Genau dieser Aspekt sorgt nach der Migration einer Access-Datenbank zu einer SQL Server-Datenbank immer wieder f&uuml;r &Uuml;berraschungen. Das f&auml;ngt schon mit den einfachsten Dingen an - den Tabellen.","og_url":"https:\/\/access-im-unternehmen.de\/Upsizing_von_Access_nach_SQL_Server_Tabellen\/","og_site_name":"Access im Unternehmen","article_published_time":"2021-02-11T21:19:26+00:00","og_image":[{"url":"http:\/\/vg06.met.vgwort.de\/na\/c1ca5703e61645a384fd0d014868f0a6","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"46\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Upsizing_von_Access_nach_SQL_Server_Tabellen\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Upsizing_von_Access_nach_SQL_Server_Tabellen\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Upsizing von Access nach SQL Server: Tabellen","datePublished":"2021-02-11T21:19:26+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Upsizing_von_Access_nach_SQL_Server_Tabellen\/"},"wordCount":8477,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Upsizing_von_Access_nach_SQL_Server_Tabellen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg06.met.vgwort.de\/na\/c1ca5703e61645a384fd0d014868f0a6","articleSection":["1\/2008","2008","SQL Server und Co."],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Upsizing_von_Access_nach_SQL_Server_Tabellen\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Upsizing_von_Access_nach_SQL_Server_Tabellen\/","url":"https:\/\/access-im-unternehmen.de\/Upsizing_von_Access_nach_SQL_Server_Tabellen\/","name":"Upsizing von Access nach SQL Server: Tabellen - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Upsizing_von_Access_nach_SQL_Server_Tabellen\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Upsizing_von_Access_nach_SQL_Server_Tabellen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg06.met.vgwort.de\/na\/c1ca5703e61645a384fd0d014868f0a6","datePublished":"2021-02-11T21:19:26+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Upsizing_von_Access_nach_SQL_Server_Tabellen\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Upsizing_von_Access_nach_SQL_Server_Tabellen\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Upsizing_von_Access_nach_SQL_Server_Tabellen\/#primaryimage","url":"http:\/\/vg06.met.vgwort.de\/na\/c1ca5703e61645a384fd0d014868f0a6","contentUrl":"http:\/\/vg06.met.vgwort.de\/na\/c1ca5703e61645a384fd0d014868f0a6"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Upsizing_von_Access_nach_SQL_Server_Tabellen\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Upsizing von Access nach SQL Server: Tabellen"}]},{"@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\/55000548","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=55000548"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000548\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000548"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000548"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000548"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}