{"id":55000845,"date":"2012-08-01T00:00:00","date_gmt":"2020-05-22T21:47:31","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=845"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"AccessDaten_mit_HTML_darstellen","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/AccessDaten_mit_HTML_darstellen\/","title":{"rendered":"Access-Daten mit HTML darstellen"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg05.met.vgwort.de\/na\/b0aff4dca7ec4680ae4e51d744923ee3\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Access-Formulare offenbaren immer wieder mal kleine Mankos: Mal lassen sich keine hierarchisch strukturierten Daten darstellen, mal m&ouml;chten Sie die Daten vielleicht mit ein paar farbigen Elementen aufh&uuml;bschen. Mit HTML hingegen ist dies alles m&ouml;glich &#8211; Sie bauen sich einfach mit Elementen wie table, tr und td die gew&uuml;nschte Struktur auf und f&uuml;llen diese mit den entsprechenden Daten. Fehlt nur noch ein wenig Interaktivit&auml;t, oder Nein: Auch das gelingt mit DHTML.<\/b><\/p>\n<p><b>Warum Webbrowser und DHTML<\/b><\/p>\n<p>Anlass f&uuml;r das Aufgreifen des Webbrowser-Steuerelements und der M&ouml;glichkeiten von DHTML war ein Projekt f&uuml;r einen Kunden, der sich sowohl eine Fehlzeiten&uuml;bersicht als auch eine Outlook-&auml;hnliche Darstellung von &uuml;ber den Tag verteilten Aufgaben w&uuml;nschte.<\/p>\n<p>Kein Problem: Die ben&ouml;tigten Elemente lassen sich n&auml;mlich prima per HTML darstellen und auch ein Anklicken eines Tabellenelements oder das Anzeigen eines Kontextmen&uuml;s l&auml;sst sich realisieren.<\/p>\n<p>Die Verwaltung der Fehlzeiten sieht im angesprochenen Projekt &uuml;brigens wie in Bild 2 dar.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2012_04\/TabellenMitDHTML-web-images\/pic002.png\" alt=\"pic002.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1: Fehlzeitenverwaltung auf HTML-Basis<\/span><\/b><\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2012_04\/TabellenMitDHTML-web-images\/pic001.png\" alt=\"pic001.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2: Wochen&uuml;bersicht<\/span><\/b><\/p>\n<p>Die Fehlzeiten&uuml;bersicht erlaubt das Anlegen von Fehlzeiten per Kontextmen&uuml;, w&auml;hrend die Wochen&uuml;bersicht die durchgef&uuml;hrten T&auml;tigkeiten beim &Uuml;berfahren mit der Maus als Tool-TipText anzeigt.<\/p>\n<p><b>Vorbereitungen<\/b><\/p>\n<p>F&uuml;r eine Darstellung wie in den beiden Abbildungen ben&ouml;tigen Sie zun&auml;chst ein Formular mit einem Webbrowser-Steuerelement. Dieses f&uuml;gen Sie dem Formular in der Entwurfsansicht &uuml;ber den Eintrag ActiveX-Steuerelemente der Toolbox mit den Steuerelementen hinzu (s. Bild 3). Um einen einfachen Text im Webbrowser-Steuerelement anzuzeigen, sind nur wenige Zeilen Code n&ouml;tig. Als Erstes deklarieren Sie eine Objektvariable mit dem Schl&uuml;sselwort <b>WithEvents<\/b>, damit Sie per Code auf die Ereignisse des Webbrowser-Steuerelements reagieren k&ouml;nnen:<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2012_04\/TabellenMitDHTML-web-images\/pic003.png\" alt=\"pic003.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 3: Formular mit Webbrowser-Steuerelement<\/span><\/b><\/p>\n<pre>Dim WithEvents objWebbrowser As WebBrowser<\/pre>\n<p>Dann legen Sie eine Ereignisprozedur an, die durch das Ereignis <b>Beim Laden <\/b>ausgel&ouml;st wird. Diese Prozedur f&uuml;gt der Variablen <b>objWebbrowser <\/b>einen Verweis auf das Steuerelement hinzu und ruft eine leere Seite auf (<b>about:blank<\/b>).<\/p>\n<p>Die folgende Schleife ist eine Warteschleife, die erst verlassen wird, wenn <b>about:blank <\/b>geladen ist. Erst dann wird mit <b>&lt;p&gt;Hallo!&lt;\/p&gt; <\/b>ein Text im aktuellen Dokument im Webbrowser-Steuerelement angezeigt (s. Bild 4).<\/p>\n<p><img decoding=\"async\" class=\"abbildung\" src=\"TabellenMitDHTML-web-images\/pic004.png\" alt=\"pic004.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 4: Eine erste Ausgabe im Webbrowser-Steuerelement<\/span><\/b><\/p>\n<pre>Private Sub Form_Load()\r\n    Set objWebbrowser = Me!ctlWebbrowser.Object\r\n    objWebbrowser.Navigate &quot;about:blank&quot;\r\n    Do While Not objWebbrowser.ReadyState = READYSTATE_COMPLETE\r\n         DoEvents\r\n        Debug.Print objWebbrowser.ReadyState\r\n    Loop\r\n    objWebbrowser.Document.Write &quot;&lt;p&gt;Hallo!&lt;\/p&gt;&quot;\r\nEnd Sub<\/pre>\n<p>Statt des simplen Textes k&ouml;nnen Sie im Webbrowser-Steuerelement alles abbilden, was Sie auch in herk&ouml;mmlichen Webanwendungen vorfinden. Wir interessieren uns jedoch zun&auml;chst einmal f&uuml;r die Darstellung von Daten, in den meisten F&auml;llen in tabellarischer oder &auml;hnlicher Form.<\/p>\n<p><b>Tabellen aufbauen<\/b><\/p>\n<p>Eine Tabelle besteht aus <b>table<\/b>-, <b>tr<\/b>&#8211; und <b>td<\/b>-Elementen. Wir k&ouml;nnten diese nun im Rahmen einer <b>Do While<\/b>-Schleife &uuml;ber die darzustellenden Datens&auml;tze Zeile f&uuml;r Zeile per Textverkettung zusammensetzen, aber es gibt bessere Methoden.<\/p>\n<p>Und die bieten &uuml;berdies die M&ouml;glichkeit, etwa einzelne Tabellenzellen als Objekt zu referenzieren, diesem weitere Eigenschaften zuzuweisen oder auch Ereignisse f&uuml;r dieses Objekt festzulegen.<\/p>\n<p><b>Tabelle per DOM anlegen<\/b><\/p>\n<p>Wir sprechen dabei von der MSHTML-Bibliothek, die uns die Methoden des <b>Document Object Model <\/b>zur Verf&uuml;gung stellt. Um diese zu nutzen, f&uuml;gen Sie dem VBA-Projekt der Datenbank einen Verweis auf die Bibliothek <b>Microsoft HTML Object Library <\/b>hinzu (s. Bild 5). F&uuml;r die folgenden Beispiele lagern wir die Zeilen zum Leeren des Dokuments in eine eigene Prozedur aus, die wie folgt aussieht:<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2012_04\/TabellenMitDHTML-web-images\/pic005.png\" alt=\"pic005.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 5: Verweis auf die MSHTML-Bibliothek<\/span><\/b><\/p>\n<pre>Private Sub WebbrowserLeeren()\r\n    objWebbrowser.Navigate &quot;about:blank&quot;\r\n    Do While Not objWebbrowser.ReadyState = READYSTATE_COMPLETE\r\n        DoEvents\r\n    Loop\r\nEnd Sub<\/pre>\n<p>Anschlie&szlig;end legen Sie eine neue Schaltfl&auml;che namens <b>cmdEinfacheTabelle <\/b>im Formular an und hinterlegen die folgende Ereignisprozedur f&uuml;r die Ereigniseigenschaft <b>Beim Klicken<\/b>:<\/p>\n<pre>Private Sub cmdEinfacheTabelle_Click()\r\n      Dim objDocument As MSHTML.HTMLDocument\r\n    Dim objTable As MSHTML.HTMLTable\r\n    Dim objRow As MSHTML.HTMLTableRow\r\n    Dim objCell As MSHTML.HTMLTableCell\r\n    Dim i As Integer\r\n    Dim j As Integer\r\n    WebbrowserLeeren\r\n    Set objDocument = objWebbrowser.Document\r\n    Set objTable = objDocument.createElement(&quot;Table&quot;)\r\n    objDocument.Body.appendChild objTable\r\n    For i = 1 To 3\r\n        Set objRow = objTable.insertRow\r\n        For j = 1 To 3\r\n            Set objCell = objRow.insertCell\r\n            objCell.innerText = &quot;Zeile &quot; &amp; i &amp; &quot;, Spalte &quot; &amp; j\r\n        Next j\r\n    Next i\r\nEnd Sub<\/pre>\n<p>Die Prozedur deklariert zun&auml;chst einige Variablen zum Speichern von Verweisen auf das Dokument sowie auf ein <b>Table<\/b>-, ein <b>TableRow<\/b>&#8211; und ein <b>TableCell<\/b>-Element. Sie sehen schon: Die Benennung der Objekte stimmt nicht mit den unter HTML verwendeten Bezeichnungen &uuml;berein, wo man mit <b>table<\/b>, <b>tr <\/b>und <b>td <\/b>arbeitet. Die hier verwendeten Objektnamen sind jedoch intuitiver.<\/p>\n<p>Die Prozedur leert zun&auml;chst das Webbrowser-Steuerelement und speichert dann einen Verweis auf das aktuell enthaltene <b>Document<\/b>-Objekt in der Variablen <b>objDocument<\/b>. Dies ist der Ausgangspunkt f&uuml;r weitere Aktionen. Danach erstellt sie mit der <b>CreateElement<\/b>-Methode ein neues Objekt des Typs <b>HTMLTable<\/b>. Der <b>CreateElement<\/b>-Methode &uuml;bergeben Sie den Typ allerdings ohne vorangestelltes <b>HTML <\/b>&#8211; <b>Table <\/b>reicht also aus.<\/p>\n<p>Damit dieses Element nicht im luftleeren Raum h&auml;ngt, f&uuml;gen Sie es als Child-Element an das Element <b>objDocument <\/b>an. Da Rahmen, Hintergrund et cetera noch nicht festgelegt sind, bleiben diese wei&szlig; und die Tabelle ist nicht zu sehen. Dies behalten wir zun&auml;chst auch f&uuml;r die Zeilen und Zellen bei. Eine Zeile, also ein <b>HTMLTableRow<\/b>, wird dem <b>HTMLTable<\/b>-Objekt mit der Methode <b>insertRow <\/b>angeh&auml;ngt. Das Ergebnis dieser Methode speichern wir in der Variablen <b>objRow<\/b>. Diese wiederum bietet die Methode <b>insertCell <\/b>an, mit der wir die einzelnen Zellen hinzuf&uuml;gen k&ouml;nnen. Den Verweis auf diese Zellen speichern wir tempor&auml;r in einer Variablen des Typs <b>HTMLTableCell<\/b>.<\/p>\n<p>Das Anlegen von Zeilen und Zellen bauen wir in zwei <b>For&#8230;Next<\/b>-Schleifen ein, die jeweils die Zahlen von <b>1 <\/b>bis <b>3 <\/b>durchlaufen. Damit wird eine Matrix von drei Zeilen mit je drei Zellen erstellt. Schlie&szlig;lich tun wir noch etwas daf&uuml;r, dass Sie das Ergebnis auch im Formular betrachten k&ouml;nnen: Wir f&uuml;gen den Tabellenzellen einen Text hinzu, der die aktuelle Zeile und Zelle markiert. Das Ergebnis zeigt Bild 6.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2012_04\/TabellenMitDHTML-web-images\/pic006.png\" alt=\"pic006.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 6: Per Code erzeugte Tabelle<\/span><\/b><\/p>\n<p><b>Rahmen, Abst&auml;nde und Co.<\/b><\/p>\n<p>Wenn Sie eine optisch ansprechende Tabelle anlegen m&ouml;chten, ben&ouml;tigen Sie Rahmen, Hintergr&uuml;nde, Abst&auml;nde zum Text und vieles mehr. Die folgenden Abschnitte beschreiben, wie Sie diese Eigenschaften sinnvoll einstellen k&ouml;nnen. Zun&auml;chst einmal: Die MSHTML-Bibliothkek erleichtert die Arbeit schon sehr, weil sie s&auml;mtliche Eigenschaften per IntelliSense anbietet. Allerdings gibt es doch noch einiges zu beachten.<\/p>\n<p><b>Rahmen hinzuf&uuml;gen<\/b><\/p>\n<p>Wenn Sie jeder Zelle der Tabelle einen Rahmen hinzuf&uuml;gen m&ouml;chten, erledigen Sie dies gleich beim Anlegen der Zellen beispielsweise mit den folgenden drei Anweisungen:<\/p>\n<pre>objCell.Style.BorderColor = &quot;#000000&quot;\r\nobjCell.Style.BorderStyle = &quot;dotted&quot;\r\nobjCell.Style.BorderWidth = &quot;1px&quot;<\/pre>\n<p>Damit setzen Sie sogenannte CSS-Formatierungen ein, die mehr M&ouml;glichkeiten als die HTML-Eigenschaften der Elemente bieten. In diesem Fall weisen Sie die Rahmenfarbe, die Art (<b>dotted <\/b>entspricht gestrichelt) und die Breite zu. Statt <b>dotted <\/b>k&ouml;nnen Sie auch einen durchgezogenen Rand (<b>solid<\/b>) oder andere Varianten verwenden. Das Ergebnis sehen Sie in Bild 7.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2012_04\/TabellenMitDHTML-web-images\/pic007.png\" alt=\"pic007.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 7: Per Code erzeugte Tabelle mit Linien<\/span><\/b><\/p>\n<p><b>Vom Rahmen zur Trennlinie<\/b><\/p>\n<p>Nun soll nicht jede Zelle ein eigenes K&auml;stchen erhalten, sondern es soll jeweils eine Linie zwischen den Zellen dargestellt werden. Hierf&uuml;r sieht CSS ein eigenes Attribut namens <b>border-collapse <\/b>vor. Diese Eigenschaft ist jedoch nicht per IntelliSense als Element von <b>style <\/b>verf&uuml;gbar. Sie k&ouml;nnen es jedoch von Hand eingeben. Zu beachten ist, dass Sie dieses Attribut ohne Bindestrich eingeben und dieses nur f&uuml;r die &uuml;bergeordnete Tabelle festlegen k&ouml;nnen:<\/p>\n<pre>objTable.Style.borderCollapse = &quot;collapse&quot;<\/pre>\n<p><!--30percent--><\/p>\n<p>Das Ergebnis finden Sie in Bild 8, diesmal mit durchgehendem Rand in grauer Farbe.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2012_04\/TabellenMitDHTML-web-images\/pic008.png\" alt=\"pic008.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 8: Durchgehende, zusammengef&uuml;hrte R&auml;nder<\/span><\/b><\/p>\n<p><b>Abstand der Schrift<\/b><\/p>\n<p>Aus optischen Gr&uuml;nden m&ouml;chten Sie vielleicht ein wenig mehr Platz zwischen Text und Rahmen lassen. Dies erledigen Sie mit dem <b>padding<\/b>-Attribut (es werden tats&auml;chlich einige Attribute gro&szlig;, andere kleingeschrieben). Damit stellen Sie den Abstand des Textes zum rechten, linken, oberen und unteren Rahmen ein:<\/p>\n<pre>objCell.Style.padding = &quot;10px&quot;<\/pre>\n<p>Wenn Sie dies je nach Seite individuell gestalten m&ouml;chten, verwenden Sie entsprechend <b>paddingTop<\/b>, <b>paddingLeft<\/b>, <b>paddingBottom <\/b>und <b>paddingRight<\/b>.<\/p>\n<p><b>Hintergrundfarbe einstellen<\/b><\/p>\n<p>In unserer kleinen Beispieltabelle sollen die Felder wie auf einem Schachbrett abwechselnd einen wei&szlig;en und einen alternativen Hintergrund aufweisen. Den Hintergrund stellen Sie mit der Eigenschaft <b>backgroundColor <\/b>ein, der Farbcode <b>#eeeeee <\/b>entspricht einem hellen Grau. Mit der <b>If&#8230;Then<\/b>-Bedingung f&auml;rben Sie nur jedes zweite Feld ein:<\/p>\n<pre>If (i + j) Mod 2 = 0 Then\r\n    objCell.Style.backgroundColor = &quot;#eeeeee&quot;\r\nEnd If<\/pre>\n<p>Das Ergebnis sieht schlie&szlig;lich wie in Bild 9 aus.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2012_04\/TabellenMitDHTML-web-images\/pic009.png\" alt=\"pic009.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 9: Schachbrettmuster<\/span><\/b><\/p>\n<p><b>Schriftart einstellen<\/b><\/p>\n<p>F&uuml;r die Schriftart bietet CSS unter MSHTML folgende Eigenschaften an:<\/p>\n<ul>\n<li class=\"aufz-hlung\"><b>fontFamily<\/b>: Schriftart, zum Beispiel <b>Calibri<\/b><\/li>\n<li class=\"aufz-hlung\"><b>fontSize<\/b>: Gr&ouml;&szlig;e, in den zul&auml;ssigen Einheiten angegeben, also beispielsweise <b>10pt<\/b><\/li>\n<li class=\"aufz-hlung\"><b>fontWeight<\/b>: Zahlen in Hunderterschritten von <b>100 <\/b>bis <b>900 <\/b>oder Werte wie <b>normal<\/b>, <b>bold<\/b>, <b>bolder<\/b>, <b>lighter<\/b>. Bei den meisten Schriftarten funktionieren jedoch nur <b>bold <\/b>und <b>normal<\/b>.<\/li>\n<li class=\"aufz-hlung\"><b>fontStyle<\/b>: <b>normal <\/b>oder <b>italic <\/b>(f&uuml;r kursive Schrift)<\/li>\n<\/ul>\n<p>Im Beispiel aus Bild 10 haben wir mit kursiven und fetten Schrifteinstellungen gespielt:<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2012_04\/TabellenMitDHTML-web-images\/pic010.png\" alt=\"pic010.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 10: Schrift-Variationen<\/span><\/b><\/p>\n<pre>If (i + j) Mod 2 = 0 Then\r\n    objCell.Style.FontWeight = &quot;bold&quot;\r\nEnd If\r\nobjCell.Style.fontFamily = &quot;Calibri&quot;\r\nobjCell.Style.FontSize = &quot;10pt&quot;\r\nobjCell.Style.fontStyle = &quot;italic&quot;<\/pre>\n<p>Die Schriftfarbe stellen Sie mit der Eigenschaft <b>color<\/b> ein. Die folgende Anweisung liefert beispielsweise rote Zeichen:<\/p>\n<pre>objCell.Style.Color = &quot;#ff0000&quot;<\/pre>\n<p><b>Vertikale und horizontale Ausrichtung<\/b><\/p>\n<p>Die vertikale und horizontale Ausrichtung werden interessant, wenn Zellen Daten unterschiedlicher H&ouml;he und Breite enthalten oder wenn die Zellen generell h&ouml;her oder breiter als die Daten sind und die Daten in irgendeine Richtung angeordnet werden sollen.<\/p>\n<p>Die Eigenschaft <b>verticalAlign <\/b>stellen Sie f&uuml;r die gesamte Zeile oder f&uuml;r eine einzelne Zelle ein. Gleiches gilt f&uuml;r die Eigenschaft <b>TextAlign<\/b>, die sich um die horizontale Ausrichtung k&uuml;mmert.<\/p>\n<p>F&uuml;r <b>verticalAlign <\/b>sind die folgenden Werte interessant:<\/p>\n<ul>\n<li class=\"aufz-hlung\"><b>top<\/b><\/li>\n<li class=\"aufz-hlung\"><b>middle<\/b><\/li>\n<li class=\"aufz-hlung\"><b>bottom<\/b><\/li>\n<\/ul>\n<p>Das Attribut <b>TextAlign <\/b>nimmt diese Werte entgegen:<\/p>\n<ul>\n<li class=\"aufz-hlung\"><b>left<\/b><\/li>\n<li class=\"aufz-hlung\"><b>center<\/b><\/li>\n<li class=\"aufz-hlung\"><b>right<\/b><\/li>\n<\/ul>\n<p>Wenn Sie eine der beiden Einstellungen f&uuml;r eine Zeile und f&uuml;r eine Zelle definiert haben, gilt die Einstellung f&uuml;r die Zelle. Wenn Sie auf die Schaltfl&auml;che <b>Ausrichtung<\/b> des Beispielformulars klicken, erhalten Sie die Darstellung aus Bild 11. Den Quellcode entnehmen Sie der entsprechenden Ereigniseigenschaft.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2012_04\/TabellenMitDHTML-web-images\/pic011.png\" alt=\"pic011.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 11: Verschiedene Ausrichtungen<\/span><\/b><\/p>\n<p><b>Tabellen in Tabellen<\/b><\/p>\n<p>Manche Darstellungen lassen sich am einfachsten vornehmen, indem man in einer Zelle einer Tabelle eine weitere Tabelle unterbringt. Wenn Sie beispielsweise eine Art Balkendiagramm wie in Bild 12 darstellen m&ouml;chten, legen Sie erst eine Tabelle mit der n&ouml;tigen Anzahl Zeilen an. F&uuml;gen Sie f&uuml;r jede Zeile eine Zelle ein. Warum nicht gleich mehrere Zellen Die &uuml;bereinander liegenden Zellen einer Tabelle haben jeweils die gleiche Breite. Wenn Sie Zellen mit unabh&auml;ngiger Breite erstellen m&ouml;chten, m&uuml;ssen Sie der einer Zeile entsprechenden Zelle ein weiteres <b>HTMLTable<\/b>-Element und ein <b>HTMLTableRow<\/b>-Element zuweisen. Diese Zeile entspricht dann tats&auml;chlich einer einzigen Zeile, der Sie beliebig viele <b>HTMLTableCell<\/b>-Elemente in beliebiger Breite zuweisen k&ouml;nnen. Der Code sieht vereinfacht und f&uuml;r eine Zeile mit drei Elementen wie folgt aus. F&uuml;r die untergeordneten Elemente werden zun&auml;chst diese Variablen deklariert:<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2012_04\/TabellenMitDHTML-web-images\/pic012.png\" alt=\"pic012.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 12: Balkendiagramm mit Tabellen<\/span><\/b><\/p>\n<pre>Dim objSubTable As MSHTML.HTMLTable\r\nDim objSubRow As MSHTML.HTMLTableRow\r\nDim objSubCell As MSHTML.HTMLTableCell<\/pre>\n<p>Dann werden die bereits aus den vorherigen Beispielen bekannten Elemente <b>objTable<\/b>, <b>objRow <\/b>und <b>objCell <\/b>erzeugt. Jetzt kommt der neue Teil, wobei zun&auml;chst ein neues Tabellen-Objekt erstellt, mit <b>objSubTable <\/b>referenziert und der zuletzt erstellten Zelle untergeordnet wird:<\/p>\n<pre>Set objSubTable = objDocument.createElement(&quot;Table&quot;)\r\nobjCell.appendChild objSubTable<\/pre>\n<p>Diese neue Tabelle wird mit einer eigenen Zeile gef&uuml;llt:<\/p>\n<pre>Set objSubRow = objSubTable.insertRow<\/pre>\n<p>Diese wiederum nimmt einige untergeordnete Zellen auf, die mit der gew&uuml;nschten Breite ausgestattet werden k&ouml;nnen:<\/p>\n<pre>Set objSubCell = objSubRow.insertCell\r\nobjSubCell.Style.Width = &quot;200px&quot;\r\nobjSubCell.innerText = &quot;200px&quot;\r\nobjSubCell.Style.backgroundColor = &quot;#eeeeee&quot;\r\nobjSubCell.Style.BorderColor = &quot;#000000&quot;\r\nobjSubCell.Style.BorderStyle = &quot;solid&quot;\r\nobjSubCell.Style.BorderWidth = &quot;1px&quot;\r\n...\r\nSet objSubCell = objSubRow.insertCell\r\nobjSubCell.Style.Width = &quot;50px&quot;\r\nobjSubCell.innerText = &quot;50px&quot;\r\n...\r\nSet objSubCell = objSubRow.insertCell\r\nobjSubCell.innerHTML = &quot;100px&quot;\r\nobjSubCell.Style.Width = &quot;100px&quot;<\/pre>\n<p>F&uuml;r die folgenden Zeilen wiederholt sich der Vorgang.<\/p>\n<p><b>Auf Ereignisse von HTML-Objekten reagieren<\/b><\/p>\n<p>Nachdem Sie erfahren haben, wie Sie die grundlegenden Tabellenstrukturen erzeugen und mit Rahmen, Hintergrundfarben und Texten versehen, kommen wir zum interessantesten Thema: zum Festlegen und Ausf&uuml;hren von Ereignisprozeduren f&uuml;r HTML-Elemente.<\/p>\n<p>Im ersten Beispiel soll ein Klick auf ein Element, hier eine Tabellenzelle, eine Meldung anzeigen. Um dies zu realisieren, m&uuml;ssen Sie zun&auml;chst eine Objektvariable f&uuml;r die Zelle deklarieren, und zwar mit dem Schl&uuml;sselwort <b>WithEvents<\/b>. Dies gelingt nur im Modulkopf des Klassenmoduls:<\/p>\n<pre>Dim WithEvents objClickcell As MSHTML.HTMLTableCell<\/pre>\n<p>Die Tabelle wird wie in den Beispielen zuvor aufgebaut. Die einzige Zelle dieses Beispiels wird jedoch mit der im Modulkopf deklarierten Variablen referenziert: <\/p>\n<pre>Set objClickcell = objRow.insertCell<\/pre>\n<p>Sie k&ouml;nnen dann &uuml;ber die beiden Kombinationsfelder des VBA-Fensters ein Ereignis anlegen &#8211; zum Beispiel eines, das beim Anklicken des Elements ausgel&ouml;st wird (s. Bild 14).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2012_04\/TabellenMitDHTML-web-images\/pic013.png\" alt=\"pic013.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 13: Anlegen einer Ereignisprozedur f&uuml;r ein HTML-Objekt<\/span><\/b><\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2012_04\/TabellenMitDHTML-web-images\/pic014.png\" alt=\"pic014.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 14: Ausl&ouml;sen eines Ereignisses beim Klick auf ein Element<\/span><\/b><\/p>\n<p><b>Viele Zellen anklicken<\/b><\/p>\n<p>Wenn Sie eine ganze Reihe HTML-Objekte mit Ereignisprozeduren versehen m&ouml;chten, m&uuml;ssen Sie f&uuml;r jedes Objekt eine eigene Objektvariable mit dem Schl&uuml;sselwort <b>WithEvents <\/b>erstellen. Dies gelingt nat&uuml;rlich nur, wenn Sie vorher wissen, wie viele Objekte Sie ben&ouml;tigen. Bei der Anzeige von Tabelleninhalten wird das schwierig, denn diese kann ja unterschiedlich viele Datens&auml;tze enthalten. Wenn Sie also wie in Bild 15 beliebig viele Elemente anlegen m&ouml;chten, die beim Anklicken vom Inhalt abh&auml;ngige Ereignisse ausl&ouml;sen, ben&ouml;tigen Sie eine Wrapper-Klasse. F&uuml;r jedes mit einem <b>Click<\/b>-Ereignis auszustattende Element wird ein Objekt auf Basis dieser Wrapper-Klasse erstellt. Diese Klasse, die Sie unter dem Namen <b>clsCellWrapper <\/b>als neues Klassenmodul erstellen, enth&auml;lt zu Beispielzwecken nur den n&ouml;tigsten Code. Da w&auml;re zun&auml;chst einmal die mit dem Schl&uuml;sselwort <b>WithEvents <\/b>ausgestattete Objektvariable zum Aufnehmen des Verweises auf das betroffene <b>HTMLTableCell<\/b>-Objekt:<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2012_04\/TabellenMitDHTML-web-images\/pic015.png\" alt=\"pic015.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 15: Ereignisse f&uuml;r mehrere Zellen ausl&ouml;sen<\/span><\/b><\/p>\n<pre>Dim WithEvents m_Cell As MSHTML.HTMLTableCell<\/pre>\n<p>Um dieser Variablen den Verweis auf das <b>HTMLTableCell<\/b>-Objekt zuzuweisen, legen Sie eine <b>Property Set<\/b>-Prozedur an:<\/p>\n<pre>Public Property Set Cell(Cell As MSHTML.HTMLTableCell)\r\n    Set m_Cell = Cell\r\nEnd Property<\/pre>\n<p>Schlie&szlig;lich fehlt noch die Ereignisprozedur, die Sie ja auch schon im vorherigen Beispiel angelegt haben &#8211; dort allerdings noch direkt im Formularmodul:<\/p>\n<pre>Private Function m_Cell_onclick() As Boolean\r\n    MsgBox m_Cell.innerText\r\nEnd Function<\/pre>\n<p>Dieses Ereignis sorgt daf&uuml;r, dass der Wert der Eigenschaft <b>innerText <\/b>der Zelle ausgegeben wird, also der Text, der innerhalb der Tabellenzelle angezeigt wird.<\/p>\n<p>Nun zum Einbau der Wrapper-Klasse in den Aufbau der Tabelle mit den f&uuml;nf mal f&uuml;nf Zellen &#8211; siehe auch den vollst&auml;ndigen Code der Schaltfl&auml;che <b>cmdVieleKlicks <\/b>im Beispielformular. Im Kopf des Formularmoduls deklarieren wir ein <b>Collection<\/b>-Objekt, das alle Wrapper-Objekte aufnehmen soll, damit keines verloren geht:<\/p>\n<pre>Dim colCells As Collection<\/pre>\n<p>In der Prozedur zum Erstellen der Tabelle finden Sie dann im Vergleich zu den vorherigen Beispielen die nachfolgend dargestellten wichtigen Codezeilen. Als Erstes wird eine Objektvariable f&uuml;r den Verweis auf die Wrapper-Klasse angelegt:<\/p>\n<pre>Dim objCellWrapper As clsCellWrapper<\/pre>\n<p>Au&szlig;erdem instanziert die Prozedur die Collection:<\/p>\n<pre>Set colCells = New Collection<\/pre>\n<p>Das HTML-Dokument und das HTMLTable-Objekt erstellt die Prozedur wie zuvor. Die beiden Schleifen, in denen Zeilen und Zellen der Tabelle gef&uuml;llt werden, enthalten jedoch einige interessante Anweisungen:<\/p>\n<pre>For i = 1 To 5\r\n    Set objRow = objTable.insertRow\r\n    For j = 1 To 5\r\n        intCount = intCount + 1\r\n        Set objCell = objRow.insertCell\r\n        With objCell\r\n              ''Formatierungen\r\n            .innerText = intCount\r\n        End With\r\n        Set objCellWrapper = New clsCellWrapper\r\n        With objCellWrapper\r\n            Set .Cell = objCell\r\n        End With\r\n        colCells.Add objCellWrapper\r\n    Next j\r\nNext i<\/pre>\n<p>Hier wird zun&auml;chst die Zeile erstellt &#8211; nichts Neues an dieser Stelle. In der inneren Schleife erstellt die Prozedur dann die Zellen, zun&auml;chst wie gewohnt mit der <b>insertCell<\/b>-Methode. Der Zelle wird mit der <b>innerText<\/b>-Eigenschaft ein Text zugewiesen, in diesem Fall der Inhalt der Z&auml;hlervariablen <b>intCount<\/b>. Danach erstellt die Prozedur das Wrapper-Objekt auf Basis der Klasse <b>clsCellWrapper <\/b>und weist der Eigenschaft <b>Cell <\/b>einen Verweis auf das soeben erstellte <b>HTMLTableCell<\/b>-Objekt zu. Schlie&szlig;lich wird das Wrapper-Objekt der Collection zugewiesen. Fertig! Es gibt nun ein Wrapper-Objekt f&uuml;r jede Zelle der Tabelle, die auf einen Klick mit der Ausgabe der enthaltenen Nummer reagiert.<\/p>\n<p>Wenn Sie nun beispielsweise Datens&auml;tze einer Tabelle per HTML ausgeben und mit einer &auml;hnlichen Funktion versehen wollen, werden Sie als Text der Tabellenzelle etwa einen Kundennamen oder einen &auml;hnlichen Wert der Tabelle anzeigen, aber nicht unbedingt den Prim&auml;rschl&uuml;sselwert. Den ben&ouml;tigen Sie aber, um gezielt Aktionen wie etwa das &Ouml;ffnen oder L&ouml;schen eines per HTML angezeigten Datensatzes auszul&ouml;sen. Kein Problem: Wenn Sie schon eine Wrapper-Klasse etwa f&uuml;r jeden Kunden erstellen, wie im Beispiel aus Bild 16 geschehen, k&ouml;nnen Sie dieser Wrapper-Klasse auch noch weitere Eigenschaften hinzuf&uuml;gen, die dann beim Anklicken der Klasse ausgewertet und f&uuml;r den jeweiligen Zweck genutzt werden.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2012_04\/TabellenMitDHTML-web-images\/pic016.png\" alt=\"pic016.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 16: Ermitteln der KundeID per Klick auf einen Eintrag<\/span><\/b><\/p>\n<p>Die modifizierte Wrapperklasse f&uuml;r einen Kunden sieht so aus:<\/p>\n<pre>Dim WithEvents m_Cell As MSHTML.HTMLTableCell\r\nDim m_KundeID As Long\r\nPublic Property Set Cell(Cell As MSHTML.HTMLTableCell)\r\n    Set m_Cell = Cell\r\nEnd Property\r\nPublic Property Let KundeID(KundeID As Long)\r\n    m_KundeID = KundeID\r\nEnd Property\r\nPrivate Function m_Cell_onclick() As Boolean\r\n    MsgBox &quot;Sie haben den Kunden mit der ID ''&quot; &amp; m_KundeID &amp; &quot;'' angeklickt.&quot;\r\nEnd Function<\/pre>\n<p>Auf Seiten des Formularmoduls sorgt die Prozedur aus <span class=\"verweis-ohneumbruch\"><a href=\"#anker-70-anchor\">Listing 1<\/a><\/span> daf&uuml;r, dass alle Datens&auml;tze der Tabelle <b>tblKunden <\/b>auf der HTML-Seite angezeigt werden. Dabei greifen wir im Vergleich zu den vorherigen Beispielen erstmals auf die Daten einer Access-Tabelle zu, um die HTML-Seite zu erstellen. F&uuml;r jeden Eintrag der Tabelle wird eine Zeile mit je einer Zelle, gef&uuml;llt mit dem Kundennamen, angelegt. F&uuml;r jede Zelle erstellt die Prozedur ein Wrapper-Objekt, das erstens eine Referenz auf die jeweilige Zelle erh&auml;lt, um auf ihre Ereignisse reagieren zu k&ouml;nnen. Zweitens weisen wir der neuen Eigenschaft <b>KundeID <\/b>jeweils den Wert des gleichnamigen Feldes der zugrunde liegenden Tabelle zu. Darauf greift die Wrapper-Klasse zu, wenn eines der <b>HTMLCell<\/b>-Elemente angeklickt wird, und gibt eine entsprechende Meldung aus.<\/p>\n<p class=\"listingueberschrift\">Listing 1: Anzeigen von Kunden und Erstellen einer Wrapper-Klasse<\/p>\n<pre>Private Sub cmdKunden_Click()\r\n    Dim objDocument As MSHTML.HTMLDocument\r\n    Dim objTable As MSHTML.HTMLTable\r\n    Dim objRow As MSHTML.HTMLTableRow\r\n    Dim objCell As MSHTML.HTMLTableCell\r\n    Dim i As Integer\r\n    Dim j As Integer\r\n    Dim intCount As Integer\r\n    Dim objCellWrapper As clsCellwrapperKunde\r\n    Dim db As DAO.Database\r\n    Dim rst As DAO.Recordset\r\n    Set colCells = New Collection\r\n    Set objDocument = objWebbrowser.Document\r\n    Set db = CurrentDb\r\n    Set rst = db.OpenRecordset(&quot;SELECT * FROM tblKunden&quot;, dbOpenDynaset)\r\n    WebbrowserLeeren\r\n    objWebbrowser.Document.Clear\r\n    Set objTable = objDocument.createElement(&quot;Table&quot;)\r\n    objDocument.Body.appendChild objTable\r\n    objTable.Style.borderCollapse = &quot;collapse&quot;\r\n    Do While Not rst.EOF\r\n        Set objRow = objTable.insertRow\r\n        Set objCell = objRow.insertCell\r\n        With objCell\r\n            .innerText = rst!Kunde\r\n        End With\r\n        Set objCellWrapper = New clsCellwrapperKunde\r\n        With objCellWrapper\r\n            Set .Cell = objCell\r\n            .KundeID = rst!KundeID\r\n        End With\r\n        colCells.Add objCellWrapper\r\n        rst.MoveNext\r\n    Loop\r\nEnd Sub<\/pre>\n<p><b>HTML-Elemente referenzieren<\/b><\/p>\n<p>Wenn Sie ein Element anklicken, m&ouml;chten Sie vielleicht, dass es seine Farbe &auml;ndert oder dass es einen anderen Text anzeigt. Das ist mit den in den vorherigen Beispielen vorgestellten Wrapper-Klassen problemlos m&ouml;glich, denn jede Klasse kann ja beim Ausl&ouml;sen von Ereignissen auf das Objekt zugreifen, welches das jeweilige Ereignis ausgel&ouml;st hat. Was aber, wenn Sie von Ereignisprozeduren, die vom &uuml;bergeordneten Formular oder von anderen HTML-Elementen ausgel&ouml;st wurden, auf ein anderes Element zugreifen m&ouml;chten In diesem Fall ben&ouml;tigen Sie einen entsprechenden Objektverweis auf dieses HTML-Objekt beziehungsweise eine M&ouml;glichkeit, das Objekt per Code zu referenzieren und die gew&uuml;nschten &auml;nderungen durchzuf&uuml;hren. <\/p>\n<p>Dann legen Sie beim Erstellen der HTML-Elemente die Eigenschaft <b>id <\/b>fest, und zwar mit einem eindeutigen Wert &#8211; beispielsweise einem Prim&auml;rschl&uuml;sselwert:<\/p>\n<pre>objCell.ID = rst!KundeID<\/pre>\n<p>Diese Zeile haben wir in der vorherigen Prozedur noch erg&auml;nzt. Wenn Sie nun erst auf die Schaltfl&auml;che <b>Viele Klicks <\/b>und dann auf <b>Element referenzieren <\/b>klicken, wird das erste Element grau hinterlegt. Ein Elemente mit einer <b>id <\/b>referenzieren Sie so:<\/p>\n<pre>Private Sub cmdElementReferenzieren_Click()\r\n    Dim objDocument As MSHTML.HTMLDocument\r\n    Set objDocument = Me!ctlWebbrowser.Object.Document\r\n    objDocument.getElementById(&quot;1&quot;).Style.backgroundColor = &quot;#cccccc&quot;\r\nEnd Sub<\/pre>\n<p>Hier wird zun&auml;chst das Dokument referenziert, damit Sie auf dessen Elemente per IntelliSense zugreifen k&ouml;nnen. Danach wird die Hintergrundfarbe des Elements mit dem Wert <b>1 <\/b>f&uuml;r die Eigenschaft <b>id <\/b>auf Grau ge&auml;ndert.<\/p>\n<p><b>Zusammenfassung und Ausblick<\/b><\/p>\n<p>Mit HTML lassen sich nicht nur ann&auml;hernd alle Ansichten von Daten realisieren, sondern auch die Automatisierung der angezeigten Elemente. Wir werden in folgenden Beitr&auml;gen auf die hier vorgestellten grundlegenden Techniken eingehen und Anwendungsbeispiele vorstellen.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>AccessdatenMitHMTLDarstellen.mdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/{B45A0934-142D-4ADC-9116-DEA9909FAF09}\/aiu_845.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Access-Formulare offenbaren immer wieder mal kleine Mankos: Mal lassen sich keine hierarchisch strukturierten Daten darstellen, mal m&ouml;chten Sie die Daten vielleicht mit ein paar farbigen Elementen aufh&uuml;bschen. Mit HTML hingegen ist dies alles m&ouml;glich &#8211; Sie bauen sich einfach mit Elementen wie table, tr und td die gew&uuml;nschte Struktur auf und f&uuml;llen diese mit den gew&uuml;nschten Daten. Fehlt nur noch ein wenig Interaktivit&auml;t, oder Nein: Auch das gelingt mit DHTML.<\/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":[662012,66042012,44000026],"tags":[],"class_list":["post-55000845","post","type-post","status-publish","format-standard","hentry","category-662012","category-66042012","category-Interaktiv"],"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>Access-Daten mit HTML darstellen - 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\/AccessDaten_mit_HTML_darstellen\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Access-Daten mit HTML darstellen\" \/>\n<meta property=\"og:description\" content=\"Access-Formulare offenbaren immer wieder mal kleine Mankos: Mal lassen sich keine hierarchisch strukturierten Daten darstellen, mal m&ouml;chten Sie die Daten vielleicht mit ein paar farbigen Elementen aufh&uuml;bschen. Mit HTML hingegen ist dies alles m&ouml;glich - Sie bauen sich einfach mit Elementen wie table, tr und td die gew&uuml;nschte Struktur auf und f&uuml;llen diese mit den gew&uuml;nschten Daten. Fehlt nur noch ein wenig Interaktivit&auml;t, oder Nein: Auch das gelingt mit DHTML.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/AccessDaten_mit_HTML_darstellen\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-22T21:47:31+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg05.met.vgwort.de\/na\/b0aff4dca7ec4680ae4e51d744923ee3\" \/>\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=\"18\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/AccessDaten_mit_HTML_darstellen\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/AccessDaten_mit_HTML_darstellen\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Access-Daten mit HTML darstellen\",\"datePublished\":\"2020-05-22T21:47:31+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/AccessDaten_mit_HTML_darstellen\\\/\"},\"wordCount\":3018,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/AccessDaten_mit_HTML_darstellen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/b0aff4dca7ec4680ae4e51d744923ee3\",\"articleSection\":[\"2012\",\"4\\\/2012\",\"Interaktiv\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/AccessDaten_mit_HTML_darstellen\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/AccessDaten_mit_HTML_darstellen\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/AccessDaten_mit_HTML_darstellen\\\/\",\"name\":\"Access-Daten mit HTML darstellen - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/AccessDaten_mit_HTML_darstellen\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/AccessDaten_mit_HTML_darstellen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/b0aff4dca7ec4680ae4e51d744923ee3\",\"datePublished\":\"2020-05-22T21:47:31+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/AccessDaten_mit_HTML_darstellen\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/AccessDaten_mit_HTML_darstellen\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/AccessDaten_mit_HTML_darstellen\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/b0aff4dca7ec4680ae4e51d744923ee3\",\"contentUrl\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/b0aff4dca7ec4680ae4e51d744923ee3\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/AccessDaten_mit_HTML_darstellen\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Access-Daten mit HTML darstellen\"}]},{\"@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":"Access-Daten mit HTML darstellen - 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\/AccessDaten_mit_HTML_darstellen\/","og_locale":"de_DE","og_type":"article","og_title":"Access-Daten mit HTML darstellen","og_description":"Access-Formulare offenbaren immer wieder mal kleine Mankos: Mal lassen sich keine hierarchisch strukturierten Daten darstellen, mal m&ouml;chten Sie die Daten vielleicht mit ein paar farbigen Elementen aufh&uuml;bschen. Mit HTML hingegen ist dies alles m&ouml;glich - Sie bauen sich einfach mit Elementen wie table, tr und td die gew&uuml;nschte Struktur auf und f&uuml;llen diese mit den gew&uuml;nschten Daten. Fehlt nur noch ein wenig Interaktivit&auml;t, oder Nein: Auch das gelingt mit DHTML.","og_url":"https:\/\/access-im-unternehmen.de\/AccessDaten_mit_HTML_darstellen\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-22T21:47:31+00:00","og_image":[{"url":"http:\/\/vg05.met.vgwort.de\/na\/b0aff4dca7ec4680ae4e51d744923ee3","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"18\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/AccessDaten_mit_HTML_darstellen\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/AccessDaten_mit_HTML_darstellen\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Access-Daten mit HTML darstellen","datePublished":"2020-05-22T21:47:31+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/AccessDaten_mit_HTML_darstellen\/"},"wordCount":3018,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/AccessDaten_mit_HTML_darstellen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg05.met.vgwort.de\/na\/b0aff4dca7ec4680ae4e51d744923ee3","articleSection":["2012","4\/2012","Interaktiv"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/AccessDaten_mit_HTML_darstellen\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/AccessDaten_mit_HTML_darstellen\/","url":"https:\/\/access-im-unternehmen.de\/AccessDaten_mit_HTML_darstellen\/","name":"Access-Daten mit HTML darstellen - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/AccessDaten_mit_HTML_darstellen\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/AccessDaten_mit_HTML_darstellen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg05.met.vgwort.de\/na\/b0aff4dca7ec4680ae4e51d744923ee3","datePublished":"2020-05-22T21:47:31+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/AccessDaten_mit_HTML_darstellen\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/AccessDaten_mit_HTML_darstellen\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/AccessDaten_mit_HTML_darstellen\/#primaryimage","url":"http:\/\/vg05.met.vgwort.de\/na\/b0aff4dca7ec4680ae4e51d744923ee3","contentUrl":"http:\/\/vg05.met.vgwort.de\/na\/b0aff4dca7ec4680ae4e51d744923ee3"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/AccessDaten_mit_HTML_darstellen\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Access-Daten mit HTML darstellen"}]},{"@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\/55000845","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=55000845"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000845\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000845"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000845"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000845"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}