{"id":55001188,"date":"2019-06-01T00:00:00","date_gmt":"2020-05-13T20:54:35","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1188"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"HTMLTabellen_mit_fester_Kopfzeile","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/HTMLTabellen_mit_fester_Kopfzeile\/","title":{"rendered":"HTML-Tabellen mit fester Kopfzeile"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg06.met.vgwort.de\/na\/43162cba131a410fa9be77d77f244c35\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>In den vorherigen Ausgaben von Access im Unternehmen und in der aktuellen Ausgabe arbeiten wir in einigen Beitr&auml;gen mit dem Webbrowser-Steuerelement und stellen Daten, die wir mit den Bordmitteln von Access nicht ad&auml;quat darstellen k&ouml;nnen, mit HTML im Webbrowser-Steuerelement dar. Damit erhalten wir wesentlich flexiblere M&ouml;glichkeiten, aber auch der Aufwand steigt. Eine Anforderung, die bisher nicht erf&uuml;llt wurde, ist das Fixieren der obersten Zeile in einer Ansicht, in der wir zur Anzeige aller Daten nach unten scrollen mussten. Wie wir den Daten einer Tabelle eine fixe Kopfzeile hinzuf&uuml;gen, zeigen wir in diesem Beitrag.<\/b><\/p>\n<h2>Problem<\/h2>\n<p>Wenn wir in einem Webbrowser-Steuerelement eine HTML-Seite mit einer gr&ouml;&szlig;eren Menge Daten in einer HTML-Tabelle laden, wird diese wie gew&uuml;nscht angezeigt &#8211; auch inklusive der &Uuml;berschriften im Tabellenkopf.<\/p>\n<p>Sobald wir jedoch nach unten scrollen, um die aktuell nicht sichtbaren Daten anzusehen, verschwinden nicht nur die obersten Datens&auml;tze, sondern auch die Kopfzeile mit den Spalten&uuml;berschriften wird nach oben aus dem sichtbaren Bereich geschoben. Das wollen wir &auml;ndern, indem wir die Kopfzeile irgendwie oben fixieren.<\/p>\n<p>Im Web werden viele L&ouml;sungen f&uuml;r dieses Problem vorgeschlagen. Viele davon nutzen Techniken wie Javascript. Hier ist nicht sichergestellt, dass alle Browser dies wie gew&uuml;nscht darstellen.<\/p>\n<p>Da das Webbrowser-Steuerelement den aktuell im System als Standardbrowser eingestellten Browser verwendet, sollten Sie hier eine Technik verwenden, die m&ouml;glichst von allen aktuellen Browsern unterst&uuml;tzt wird. Unser Ergebnis soll wie in Bild 1 aussehen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_03\/pic_1188_001.png\" alt=\"HTML-Tabelle mit Scrollbalken\" width=\"549,6265\" height=\"692,6805\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: HTML-Tabelle mit Scrollbalken<\/span><\/b><\/p>\n<h2>L&ouml;sung<\/h2>\n<p>In diesem Fall w&auml;hlen wir eine L&ouml;sung, die nur auf CSS basiert. In diesem Fall wollen wir nicht mehr, dass der Benutzer den kompletten Inhalt des Webbrowser-Steuerelements scrollen muss, sondern nur noch den Teil der Tabelle mit den Daten.<\/p>\n<p>Der Trick dabei ist, dass wir zwei Tabellen nutzen: Die erste zeigt nur eine Zeile mit den Spalten&uuml;berschriften an, die zweite die eigentlichen Daten. Damit der Benutzer in der zweiten Tabelle durch die Datens&auml;tze scrollen kann, ben&ouml;tigen wir ein spezielles Attribut. Au&szlig;erdem f&uuml;gen wir die zweite Tabelle in die erste Tabelle ein.<\/p>\n<h2>F&uuml;llen des Webbrowser-Steuerelements<\/h2>\n<p>Bevor wir uns die Funktionen zum Erstellen des HTML-Codes und des CSS-Codes ansehen, wollen wir noch die Prozeduren zum Formular hinzuf&uuml;gen, welche das Webbrowser-Steuerelement mit den Daten aus diesen Funktionen f&uuml;llen. Im Klassenmodul des Formulars f&uuml;gen wir im allgemeinen Teil zwei Objektvariablen ein:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>WithEvents objWebbrowser<span style=\"color:blue;\"> As <\/span>WebBrowser\r\n<span style=\"color:blue;\">Dim <\/span>WithEvents objDocument<span style=\"color:blue;\"> As <\/span>HTMLDocument<\/pre>\n<p>Die erste wird in der Prozedur gef&uuml;llt, die durch das Ereignis <b>Beim &Ouml;ffnen <\/b>des Formulars ausgel&ouml;st wird:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Open(Cancel<span style=\"color:blue;\"> As Integer<\/span>)\r\n     <span style=\"color:blue;\">Set<\/span> objWebbrowser = Me!ctlWebbrowser.Object\r\n     Me.TimerInterval = 50\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Hier f&uuml;llen wir das Webbrowser-Steuerelement allerdings noch nicht. Dies erledigen wir nach einer kurzen, aus technischen Gr&uuml;nden notwendigen Verz&ouml;gerung. Dazu stellen wir das Zeitgeberintervall auf 50ms ein und hinterlegen eine Prozedur f&uuml;r das Ereignis <b>Bei Zeitgeber<\/b>, die nach diesem Zeitraum ausgel&ouml;st wird:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Timer()\r\n     objWebbrowser.Navigate \"about:blank\"\r\n     <span style=\"color:blue;\">Set<\/span> objDocument = objWebbrowser.Document\r\n     Me.TimerInterval = 0\r\n     DoEvents\r\n     objDocument.body.innerHTML = HTMLCode\r\n     Inzwischenablage objDocument.body.innerHTML\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Die Prozedur leert das Webbrowser-Steuerelement, weist der Objektvariablen <b>objDocument <\/b>das im Webbrowser-Steuerelement enthaltene Dokument zu, setzt <b>TimerInterval <\/b>auf <b>0<\/b>, damit diese Ereignisprozedur nicht nochmals ausgel&ouml;st wird, und weist dann der Eigenschaft <b>innerHTML <\/b>das Ergebnis der sp&auml;ter vorgestellten Funktion <b>HTMLCode <\/b>zu. Diese liefert den vollst&auml;ndigen HTML-Code.<\/p>\n<p>Damit Sie bei &Auml;nderungen des HTML-Codes die &Auml;nderungen direkt einsehen k&ouml;nnen, haben wir die Schaltfl&auml;che <b>cmdAktualisieren <\/b>hinzugef&uuml;gt. Diese liest den HTML-Code neu ein:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdAktualisieren_Click()\r\n     objDocument.body.innerHTML = HTMLCode\r\n     Inzwischenablage objDocument.body.innerHTML\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Au&szlig;erdem rufen beide Prozeduren die Routine <b>InZwischenablage <\/b>auf, um den Inhalt des Webbrowser-Steuerelements in die Zwischenablage zu kopieren. Sie k&ouml;nnen diesen dann etwa in einen Texteditor einf&uuml;gen, um sich den resultierenden HTML-Code anzusehen. Wenn Sie diese Funktion nicht ben&ouml;tigen, k&ouml;nnen Sie die Aufrufe von <b>InZwischenablage <\/b>auch einfach entfernen.<\/p>\n<h2>HTML-Code in zwei Prozeduren<\/h2>\n<p>Wir haben die Anweisungen f&uuml;r das Zusammenstellen des HTML-Codes zun&auml;chst in zwei Prozeduren aufgeteilt. Die erste &uuml;bernimmt die Hauptaufgabe und stellt den eigentlichen HTML-Code zusammen, die zweite steuert das <b>Style<\/b>-Element mit den CSS-Eigenschaften bei.<\/p>\n<p>Schauen wir uns zun&auml;chst die Prozedur <b>HTMLCode<\/b> an, die Sie in Listing 1 finden. Hier starten wir gleich mit der Deklaration einer Database- und einer Recordset-Variablen sowie einer Textvariablen namens <b>strHTML<\/b>, in welcher wir den HTML-Code zusammenstellen.<\/p>\n<pre><span style=\"color:blue;\">Private Function <\/span>HTMLCode()<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     <span style=\"color:blue;\">Dim <\/span>rst<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n     <span style=\"color:blue;\">Dim <\/span>strHTML<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     <span style=\"color:blue;\">Set<\/span> rst = db.OpenRecordset(\"SELECT * FROM qryArtikelMitKategorieUndLieferant\", dbOpenDynaset)\r\n     strHTML = strHTML & HTMLStyle\r\n     strHTML = strHTML & \"&lt;table class=\"\"tableheaders\"\"&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strHTML = strHTML & \"  &lt;thead&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strHTML = strHTML & \"    &lt;tr&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strHTML = strHTML & \"      &lt;th class=\"\"th1\"\" scope=\"\"col\"\"&gt;ID&lt;\/th&gt; \" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strHTML = strHTML & \"      &lt;th class=\"\"th2\"\" scope=\"\"col\"\"&gt;Artikelname&lt;\/th&gt; \" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strHTML = strHTML & \"      &lt;th class=\"\"th3\"\" scope=\"\"col\"\"&gt;Lieferant&lt;\/th&gt; \" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strHTML = strHTML & \"      &lt;th class=\"\"th4\"\" scope=\"\"col\"\"&gt;Kategorie&lt;\/th&gt; \" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strHTML = strHTML & \"      &lt;th class=\"\"th5\"\" scope=\"\"col\"\"&gt;Einzelpreis&lt;\/th&gt; \" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strHTML = strHTML & \"    &lt;\/tr&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strHTML = strHTML & \"  &lt;\/thead&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strHTML = strHTML & \"  &lt;tbody&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strHTML = strHTML & \"    &lt;tr&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strHTML = strHTML & \"      &lt;td colspan=\"\"5\"\"&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strHTML = strHTML & \"        &lt;div class=\"\"scrolling\"\"&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strHTML = strHTML & \"          &lt;table class=\"\"tablecontent\"\"&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strHTML = strHTML & \"            &lt;tbody&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     <span style=\"color:blue;\">Do While<\/span> <span style=\"color:blue;\">Not<\/span> rst.EOF\r\n         <span style=\"color:blue;\">If <\/span>rst.AbsolutePosition <span style=\"color:blue;\">Mod<\/span> 2 = 0<span style=\"color:blue;\"> Then<\/span>\r\n             strHTML = strHTML & \"              &lt;tr&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         <span style=\"color:blue;\">Else<\/span>\r\n             strHTML = strHTML & \"              &lt;tr class=\"\"dk\"\"&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         <span style=\"color:blue;\">End If<\/span>\r\n         strHTML = strHTML & \"                &lt;th class=\"\"td1\"\" scope=\"\"row\"\"&gt;\" & rst!ArtikelID & \"&lt;\/th&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         strHTML = strHTML & \"                &lt;td class=\"\"td2\"\"&gt;\" & rst!Artikelname & \"&lt;\/td&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         strHTML = strHTML & \"                &lt;td class=\"\"td3\"\"&gt;\" & rst!Firma & \"&lt;\/td&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         strHTML = strHTML & \"                &lt;td class=\"\"td4\"\"&gt;\" & rst!Kategoriename & \"&lt;\/td&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         strHTML = strHTML & \"                &lt;td class=\"\"td5\"\"&gt;\" & Format(rst!Einzelpreis, \"0.00 &euro;\") & \"&lt;\/td&gt;\" _\r\n             & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         strHTML = strHTML & \"              &lt;\/tr&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         rst.Move<span style=\"color:blue;\">Next<\/span>\r\n     <span style=\"color:blue;\">Loop<\/span>\r\n     strHTML = strHTML & \"            &lt;\/tbody&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strHTML = strHTML & \"          &lt;\/table&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strHTML = strHTML & \"        &lt;\/div&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strHTML = strHTML & \"      &lt;\/td&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strHTML = strHTML & \"    &lt;\/tr&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strHTML = strHTML & \"  &lt;\/tbody&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strHTML = strHTML & \"&lt;\/table&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     HTMLCode = strHTML\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><!--30percent--><\/p>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Listing zum Zusammenstellen des HTML-Codes<\/span><\/b><\/p>\n<p>Die Prozedur referenziert das aktuelle <b>Database<\/b>-Objekt mit der Variablen <b>db <\/b>und alle Datens&auml;tze der Abfrage <b>qryArtikelMitKategorieUndLieferant <\/b>mit der Recordset-Variablen <b>rst<\/b>.<\/p>\n<p>Die Abfrage <b>qryArtikelMitKategorieUndLieferant <\/b>stellt die Daten der Tabellen <b>tblArtikel<\/b>, <b>tblKategorien <\/b>und <b>tblLieferanten <\/b>wie in Bild 2 zusammen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_03\/pic_1188_002.png\" alt=\"Datenquelle f&uuml;r die HTML-Tabelle\" width=\"649,559\" height=\"356,6392\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Datenquelle f&uuml;r die HTML-Tabelle<\/span><\/b><\/p>\n<p>Im Anschluss beginnt die Prozedur mit dem Zusammenstellen des HTML-Codes in der Variablen <b>strHTML<\/b>. Direkt zu Beginn greift sie dabei auf die Funktion <b>HTMLStyle <\/b>zu, welche die CSS-Definition liefert &#8211; mehr dazu weiter unten. Der Teil nach der CSS-Definition sieht wie folgt aus. Dabei startet der HTML-Code mit einem <b>table<\/b>-Element mit der Klasse <b>tableheaders<\/b>:<\/p>\n<pre>&lt;table class=\"tableheaders\"&gt;<\/pre>\n<p>Danach folgen im <b>thead<\/b>-Element die Spalten&uuml;berschriften, denen wir als Klasse <b>th1 <\/b>bis <b>th6 <\/b>zuweisen:<\/p>\n<pre>   &lt;thead&gt;\r\n     &lt;tr&gt;\r\n       &lt;th class=\"th1\" scope=\"col\"&gt;ID&lt;\/th&gt; \r\n       &lt;th class=\"th2\" scope=\"col\"&gt;Artikelname&lt;\/th&gt; \r\n       &lt;th class=\"th3\" scope=\"col\"&gt;Lieferant&lt;\/th&gt; \r\n       &lt;th class=\"th4\" scope=\"col\"&gt;Kategorie&lt;\/th&gt; \r\n       &lt;th class=\"th5\" scope=\"col\"&gt;Einzelpreis&lt;\/th&gt; \r\n     &lt;\/tr&gt;\r\n   &lt;\/thead&gt;<\/pre>\n<p>Das <b>tbody<\/b>-Element nimmt zun&auml;chst ein <b>tr<\/b>&#8211; und ein <b>td<\/b>-Element auf, wobei das <b>td<\/b>-Element f&uuml;nf Spalten umfassen soll (<b>colspan=&#8220;5&#8243;<\/b>). Somit ist es genauso breit wie die f&uuml;nf &Uuml;berschriftenspalten:<\/p>\n<pre>   &lt;tbody&gt;\r\n     &lt;tr&gt;\r\n       &lt;td colspan=\"5\"&gt;<\/pre>\n<p>Darunter beginnen wir ein <b>div<\/b>-Element, dass die Klasse <b>scrolling<\/b> abbildet:<\/p>\n<pre>         &lt;div class=\"scrolling\"&gt;<\/pre>\n<p>Darin finden wir schlie&szlig;lich die Tabelle mit den eigentlichen Daten, die in jeweils einem <b>tr<\/b>-Element je Zeile und f&uuml;nf <b>th<\/b>&#8211; beziehungsweise <b>td<\/b>-Elementen f&uuml;r jede Spalte abgebildet werden. Hier haben wir beispielhaft die ersten beiden Elemente dargestellt, damit Sie einen kleinen, aber feinen Unterschied erkennen, der f&uuml;r jedes zweite <b>tr<\/b>-Element auftaucht &#8211; n&auml;mlich die Zuweisung einer Klasse f&uuml;r die alternative Hintergrundfarbe mit <b>class=&#8220;dk&#8220;<\/b>: <\/p>\n<pre>           &lt;table class=\"tablecontent\"&gt;\r\n             &lt;tbody&gt;\r\n               &lt;tr&gt;\r\n                 &lt;th class=\"td1\" scope=\"row\"&gt;1&lt;\/th&gt;\r\n                 &lt;td class=\"td2\"&gt;Chai&lt;\/td&gt;\r\n                 &lt;td class=\"td3\"&gt;Exotic Liquids&lt;\/td&gt;\r\n                 &lt;td class=\"td4\"&gt;Getr&auml;nke&lt;\/td&gt;\r\n                 &lt;td class=\"td5\"&gt;9,00 &euro;&lt;\/td&gt;\r\n               &lt;\/tr&gt;\r\n               &lt;tr class=\"dk\"&gt;\r\n                 &lt;th class=\"td1\" scope=\"row\"&gt;2&lt;\/th&gt;\r\n                 &lt;td class=\"td2\"&gt;Chang&lt;\/td&gt;\r\n                 &lt;td class=\"td3\"&gt;Exotic Liquids&lt;\/td&gt;\r\n                 &lt;td class=\"td4\"&gt;Getr&auml;nke&lt;\/td&gt;\r\n                 &lt;td class=\"td5\"&gt;9,50 &euro;&lt;\/td&gt;\r\n               &lt;\/tr&gt;\r\n             ...\r\n             &lt;\/tbody&gt;\r\n           &lt;\/table&gt;<\/pre>\n<p>Danach folgen noch die schlie&szlig;enden Tags f&uuml;r die bereits ge&ouml;ffneten Elemente:<\/p>\n<pre>         &lt;\/div&gt;\r\n       &lt;\/td&gt;\r\n     &lt;\/tr&gt;\r\n   &lt;\/tbody&gt;\r\n&lt;\/table&gt;<\/pre>\n<p>Dieser Code wird im Grunde Zeile f&uuml;r Zeile zusammengesetzt. Einen dynamischen Teil gibt es dort, wo das <b>tr<\/b>-Element f&uuml;r den jeweiligen Datensatz zusammengestellt wird. Dies geschieht innerhalb einer <b>Do While<\/b>-Schleife &uuml;ber alle Elemente des Recordsets <b>rst<\/b>.<\/p>\n<p>In diesem Recordset pr&uuml;ft die Prozedur zun&auml;chst das Ergebnis des Ausdrucks <b>rst.AbsolutePosition Mod 2 <\/b>und vergleicht dieses mit dem Wert <b>0<\/b>. Bedeutet: Wenn sich die absolute Recordset-Position ohne Rest durch zwei teilen l&auml;sst, wollen wir das <b>tr<\/b>-Element mit der Klasse <b>dk <\/b>versehen:<\/p>\n<pre><span style=\"color:blue;\">If <\/span>rst.AbsolutePosition <span style=\"color:blue;\">Mod<\/span> 2 = 0<span style=\"color:blue;\"> Then<\/span>\r\n     strHTML = strHTML & \"              &lt;tr&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n<span style=\"color:blue;\">Else<\/span>\r\n     strHTML = strHTML & \"              &lt;tr class=\"\"dk\"\"&gt;\" _\r\n         & <span style=\"color:blue;\">vbCrLf<\/span>\r\n<span style=\"color:blue;\">End If<\/span><\/pre>\n<p>Danach folgen dann die einzelnen Spalten des aktuellen Datensatzes. Schlie&szlig;lich weist die Funktion den Inhalt der Variablen <b>strHTML <\/b>dem Funktionswert <b>HTMLCode <\/b>zu.<\/p>\n<h2>Zusammenstellen der CSS-Befehle<\/h2>\n<p>Die CSS-Befehle werden in der Funktion <b>HTMLStyle<\/b> zusammengestellt (siehe Listing 2). Die resultierenden HTML-Zeilen sehen wie nachfolgend beschrieben aus. Wir erl&auml;utern diese nun im Detail. <\/p>\n<pre><span style=\"color:blue;\">Private Function <\/span>HTMLStyle()<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strHTML<span style=\"color:blue;\"> As String<\/span>\r\n     strHTML = strHTML & \"&lt;style&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strHTML = strHTML & \"  .tableheaders {width:100%; border-collapse:collapse; font-family:calibri; \" _\r\n         & \"background:#666666; border:1px solid #fff; color:#fff;}\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strHTML = strHTML & \"  .th1 {width:5%;text-align:left;}\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strHTML = strHTML & \"  .th2 {width:30%;text-align:left;}\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strHTML = strHTML & \"  .th3 {width:25%;text-align:left;}\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strHTML = strHTML & \"  .th4 {width:20%;text-align:left;}\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strHTML = strHTML & \"  .th5 {width:20%;text-align:left;}\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strHTML = strHTML & \"  .tablecontent {width:100%; height:100%; border-collapse:collapse;font-family:calibri}\" _\r\n         & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strHTML = strHTML & \"  .td1 {width:5%;text-align:left;}\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strHTML = strHTML & \"  .td2 {width:30%;text-align:left;}\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strHTML = strHTML & \"  .td3 {width:25%;text-align:left;}\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strHTML = strHTML & \"  .td4 {width:20%;text-align:left;}\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strHTML = strHTML & \"  .td5 {width:20%;text-align:left;}\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strHTML = strHTML & \"  .tableheaders td {border:1px solid #fff; color:#fff; font-size:12px;}\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strHTML = strHTML & \"  .tableheaders tbody {background:#f0c99; color:#fff;}\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strHTML = strHTML & \"  .tableheaders th, .tabletwo th {text-align:left; font-size:13px;}\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strHTML = strHTML & \"  .tablecontent td {background:#eee; color:#000;}\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strHTML = strHTML & \"  .tablecontent tr.dk td {background:#ddd; color:#000;}\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strHTML = strHTML & \"  .scrolling {height:600px;overflow:auto;}\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strHTML = strHTML & \"&lt;\/style&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     HTMLStyle = strHTML\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 2: Listing zum Zusammenstellen des HTML-Codes mit den CSS-Anweisungen<\/span><\/b><\/p>\n<p>Den Beginn macht das <b>style<\/b>-Element, das die CSS-Anweisungen enth&auml;lt:<\/p>\n<pre>&lt;style&gt;<\/pre>\n<p>Danach folgen die CSS-Attribute f&uuml;r die einzelnen Elemente und Klassen. Die Klasse <b>tableheaders<\/b> ist dem &uuml;bergeordneten Element <b>table<\/b> zugewiesen. Sie erh&auml;lt die folgenden CSS-Attribute, die zun&auml;chst f&uuml;r alle Elemente innerhalb des <b>table<\/b>-Elements und das <b>table<\/b>-Element selbst gelten:<\/p>\n<pre>   .tableheaders {width:100%; border-collapse:collapse;  font-family:calibri; background:#666666;  border:1px solid #fff; color:#fff;}<\/pre>\n<p>Die Tabelle soll 100% der Breite des &uuml;bergeordneten Elements einnehmen, also 100% des Browserfensters.<\/p>\n<p><b>border-collapse <\/b>sorgt daf&uuml;r, dass die Rahmen zweier benachbarter Tabellenzellen zusammengefasst werden. <b>font-family <\/b>legt die Schriftart fest. <b>background <\/b>legt die Hintergrundfarbe fest und <b>color <\/b>die Zeichenfarbe. <b>border <\/b>gibt an, wie der Rahmen gestaltet werden soll &#8211; ein Pixel breit, als einfache Linie und mit der Farbe <b>#fff <\/b>wie die Schriftart.<\/p>\n<p>Wenn wir nur diese eine CSS-Anweisung verwenden w&uuml;rden, s&auml;he das Ergebnis wie in Bild 3 aus. Einige der Attribute werden nur auf die &auml;u&szlig;ere Tabelle angewendet &#8211; wie die Schriftart und Schriftfarbe -, andere werden auf die untergeordnete Tabelle vererbt, wie die Hintergrundfarbe. Aber wir legen ja noch weitere CSS-Anweisungen f&uuml;r die untergeordneten Elemente fest. Die n&auml;chsten Anweisungen ben&ouml;tigen wir f&uuml;r die Breite und die Ausrichtung der Spaltenk&ouml;pfe. Diese versehen wir mit prozentualen Angaben, damit sich die Breite beim Vergr&ouml;&szlig;ern der Breite des Browsers mit &auml;ndert:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_03\/pic_1188_003.png\" alt=\"HTML-Tabelle mit CSS-Attributen\" width=\"424,7115\" height=\"232,7187\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: HTML-Tabelle mit CSS-Attributen<\/span><\/b><\/p>\n<pre>   .th1 {width:5%;text-align:left;}\r\n   .th2 {width:30%;text-align:left;}\r\n   .th3 {width:25%;text-align:left;}\r\n   .th4 {width:20%;text-align:left;}\r\n   .th5 {width:20%;text-align:left;}<\/pre>\n<p>Dann folgt die Klasse <b>tablecontent<\/b>, welche die grundlegenden Attribute f&uuml;r die untergeordnete, zu scrollende Tabelle definiert:<\/p>\n<pre>   .tablecontent {width:100%; height:100%;  border-collapse:collapse;font-family:calibri}<\/pre>\n<p>Auch hier folgen die Attribute f&uuml;r die enthaltenen Spalten, diesmal mit <b>td1 <\/b>bis <b>td2 <\/b>bezeichnet, welche die Ausrichtung und die Spaltenbreite definieren:<\/p>\n<pre>   .td1 {width:5%;text-align:left;}\r\n   .td2 {width:30%;text-align:left;}\r\n   .td3 {width:25%;text-align:left;}\r\n   .td4 {width:20%;text-align:left;}\r\n   .td5 {width:20%;text-align:left;}<\/pre>\n<p>Sie k&ouml;nnen die CSS-Attribute, wenn Sie experimentieren wollen, zuerst alle auskommentieren und dann St&uuml;ck f&uuml;r St&uuml;ck wieder einkommentieren und den Inhalt des Webbrowser-Steuerelements anschlie&szlig;end aktualisieren, um zu pr&uuml;fen, wie sich die Attribute auswirken. Nach der Anwendung dieser CSS-Attribute passen schon einmal die Schriftart und die Spaltenbreiten der Zeilen zu den Spalten&uuml;berschriften.<\/p>\n<p>Danach folgen einige Attribute, welche sich auf die Elemente auswirken sollen, die zur umgebenden Tabelle mit der Klasse <b>tableheaders <\/b>geh&ouml;ren. Bisher hatten wir Attribute, die Elementen mit einem bestimmten Wert f&uuml;r die Eigenschaft <b>class <\/b>aufweisen, also etwa <b>tableheaders <\/b>oder <b>tablecontent<\/b>.<\/p>\n<p>Aber es gibt noch weitere M&ouml;glichkeiten, um CSS-Attribute zuzuweisen &#8211; also nicht nur zu Klassen, sondern etwa zu bestimmten Elementtypen wie etwa Abs&auml;tzen, Tabellen, Tabellenzeilen et cetera.<\/p>\n<p>Diese werden dann im <b>Style<\/b>-Element nicht mit einem vorangehenden Punkt markiert, sondern es wird der Name des mit den Attributen zu versehenden Elements angegeben, also etwa <b>p<\/b>, <b>table <\/b>oder <b>td<\/b>.<\/p>\n<p>Und CSS geht noch einen Schritt weiter: Sie k&ouml;nnen auch festlegen, dass etwa nur Tabellenzeilen innerhalb eines Elements mit einer bestimmten Klasse mit bestimmten Attributen ausgestattet werden. Dann geben Sie einfach zuerst den Klassennamen (mir f&uuml;hrendem Punkt) und dann in geschweiften Klammern die entsprechenden Attribute an.<\/p>\n<p>Wir wollen beispielsweise die Schriftfarbe f&uuml;r alle Elemente auf Wei&szlig; einstellen sowie die Hintergrundfarbe f&uuml;r alle Elemente, die wir nicht sp&auml;ter noch individuell anpassen, auf einen Grauton:<\/p>\n<pre>  .tableheaders tbody {background:#888; color:#fff;}<\/pre>\n<p>Wir wollen au&szlig;erdem die Zellen mit den Daten jeweils mit einem wei&szlig;en Rahmen versehen. Dazu f&uuml;gen wir f&uuml;r die <b>td<\/b>-Elemente innerhalb des Elements mit der Klasse <b>tableheaders <\/b>die folgende Zeile hinzu. Hier legen wir auch gleich die Schriftgro&szlig;e und die Schriftfarbe fest (<b>#fff <\/b>entspricht Wei&szlig;):<\/p>\n<pre>   .tableheaders td {border:1px solid #fff; color:#fff; font-size:12px;}<\/pre>\n<p>Danach folgen dann die Ausrichtung und die Schriftgr&ouml;&szlig;e f&uuml;r die Spalten- und Zeilen&uuml;berschriften der beiden verschachtelten Tabellen:<\/p>\n<pre>   .tableheaders th, .tabletwo th {text-align:left;  font-size:13px;}<\/pre>\n<p>Die folgenden beiden Zeilen definieren die alternierenden Hintergrundfarben f&uuml;r die Zeilen mit den eigentlichen Daten der Tabelle:<\/p>\n<pre>   .tablecontent td {background:#eee; color:#000;}\r\n   .tablecontent tr.dk td {background:#ddd; color:#000;}<\/pre>\n<p>Der Unterschied ist, dass wir einmal alle <b>td<\/b>-Elemente der <b>.tablecontent<\/b>-Klasse ansprechen und diese mit der Farbe <b>#eee <\/b>versehen und einmal nur die Elemente, deren <b>tr<\/b>-Element der Klasse <b>.dk <\/b>zugeordnet ist &#8211; diese erhalten die Farbe <b>#ddd<\/b>.<\/p>\n<p>Schlie&szlig;lich, und das ist die wichtigste Einstellung in dieser CSS-Datei, folgt noch die Definition f&uuml;r die Klasse <b>.scrolling<\/b>: Dieser weisen wir n&auml;mlich f&uuml;r das Attribut <b>overflow <\/b>den Wert <b>auto <\/b>zu. Dadurch wird das Scrollen innerhalb der Tabelle aktiviert:<\/p>\n<pre>   .scrolling {height:600px;overflow:auto;}<\/pre>\n<p>Mindestens genauso wichtig ist an dieser Stelle die Einstellung der H&ouml;he des Elements mit der Klasse <b>.scrolling<\/b>: Diese stellen wir hier mit dem Attribut <b>height <\/b>auf <b>600px <\/b>ein. Wenn wir die Gr&ouml;&szlig;e nicht einschr&auml;nken, erh&auml;lt die Tabelle die H&ouml;he der enthaltenen Elemente und so entf&auml;llt auch der Grund zum Scrollen.<\/p>\n<p>Schlie&szlig;lich vervollst&auml;ndigen wir das <b>style<\/b>-Element mit dem schlie&szlig;enden Tag:<\/p>\n<pre>&lt;\/style&gt;<\/pre>\n<p>Wenn die H&ouml;he der HTML-Tabelle so gro&szlig; ist, dass diese nicht mehr komplett in den sichtbaren Bereich des Formulars passt, erscheint noch ein zweiter Scrollbalken im Formular &#8211; siehe Bild 4.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_03\/pic_1188_004.png\" alt=\"HTML-Tabelle mit eigenem Scrollbalken\" width=\"549,6265\" height=\"353,8693\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: HTML-Tabelle mit eigenem Scrollbalken<\/span><\/b><\/p>\n<p>Wenn der Benutzer nun mit dem Mauszeiger in der HTML-Tabelle mit dem Mausrad scrollt, wird erst die HTML-Tabelle gescrollt und erst dann, wenn der Scrollbalken oben oder unten in der Tabelle angekommen ist, die Bildlaufleiste des Webbrowser-Steuerelements.<\/p>\n<p>Hier sollten Sie also daf&uuml;r sorgen, dass das Formular mindestens so hoch ist wie die im Webbrowser-Steuerelement angezeigte Tabelle. Auch das Setzen eines vertikalen Ankers am oberen und unteren Rand f&uuml;r das Webbrowser-Steuerelement schafft keine Abhilfe, weil dann zwar die H&ouml;he des Webbrowser-Steuerelements an die H&ouml;he des Formulars angepasst wird, wenn der Benutzer die H&ouml;he des Formulars vergr&ouml;&szlig;ert, aber die Tabelle w&auml;chst dann nicht automatisch mit.<\/p>\n<h2>Zusammenfassung und Ausblick<\/h2>\n<p>Dieser Beitrag beschreibt die grundlegenden Schritte, um die Daten einer bestimmten Tabelle so in einer HTML-Tabelle abzubilden, dass der Benutzer in den enthaltenen Daten scrollen kann, ohne dass die Spalten&uuml;berschriften verschwinden.<\/p>\n<p>Wenn Sie nicht f&uuml;r jede Tabelle oder Abfrage, die Sie auf diese Weise darstellen wollen, erneut den kompletten Code kopieren und an die neue Datenquelle anpassen wollen, k&ouml;nnen Sie den Code auch parametrisieren.<\/p>\n<p>Wie das gelingt, zeigen wir in einem weiteren Beitrag namens <b>Flexible HTML-Tabellen mit fester Kopfzeile <\/b>(<b>www.access-im-unternehmen.de\/1189<\/b>).<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>WebbrowserTabelleMitFesterKopfzeile.accdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/322D9EC0-2F81-4E88-93DA-A99EE4D4F188\/aiu_1188.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In den vorherigen Ausgaben von Access im Unternehmen und in der aktuellen Ausgabe arbeiten wir in einigen Beitr&auml;gen mit dem Webbrowser-Steuerelement und stellen Daten, die wir mit den Bordmitteln von Access nicht ad&auml;quat darstellen k&ouml;nnen, mit HTML im Webbrowser-Steuerelement dar. Damit erhalten wir wesentlich flexiblere M&ouml;glichkeiten, aber auch der Aufwand steigt. Eine Anforderung, die bisher nicht erf&uuml;llt wurde, ist das Fixieren der obersten Zeile in einer Ansicht, in der wir zur Anzeige aller Daten nach unten scrollen mussten. Wie wir den Daten einer Tabelle eine fixe Kopfzeile hinzuf&uuml;gen, zeigen wir in diesem Beitrag.<\/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":[662019,66032019,44000026],"tags":[],"class_list":["post-55001188","post","type-post","status-publish","format-standard","hentry","category-662019","category-66032019","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>HTML-Tabellen mit fester Kopfzeile - 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\/HTMLTabellen_mit_fester_Kopfzeile\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"HTML-Tabellen mit fester Kopfzeile\" \/>\n<meta property=\"og:description\" content=\"In den vorherigen Ausgaben von Access im Unternehmen und in der aktuellen Ausgabe arbeiten wir in einigen Beitr&auml;gen mit dem Webbrowser-Steuerelement und stellen Daten, die wir mit den Bordmitteln von Access nicht ad&auml;quat darstellen k&ouml;nnen, mit HTML im Webbrowser-Steuerelement dar. Damit erhalten wir wesentlich flexiblere M&ouml;glichkeiten, aber auch der Aufwand steigt. Eine Anforderung, die bisher nicht erf&uuml;llt wurde, ist das Fixieren der obersten Zeile in einer Ansicht, in der wir zur Anzeige aller Daten nach unten scrollen mussten. Wie wir den Daten einer Tabelle eine fixe Kopfzeile hinzuf&uuml;gen, zeigen wir in diesem Beitrag.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/HTMLTabellen_mit_fester_Kopfzeile\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-13T20:54:35+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg06.met.vgwort.de\/na\/43162cba131a410fa9be77d77f244c35\" \/>\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=\"15\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/HTMLTabellen_mit_fester_Kopfzeile\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/HTMLTabellen_mit_fester_Kopfzeile\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"HTML-Tabellen mit fester Kopfzeile\",\"datePublished\":\"2020-05-13T20:54:35+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/HTMLTabellen_mit_fester_Kopfzeile\\\/\"},\"wordCount\":2172,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/HTMLTabellen_mit_fester_Kopfzeile\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/43162cba131a410fa9be77d77f244c35\",\"articleSection\":[\"2019\",\"3\\\/2019\",\"Interaktiv\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/HTMLTabellen_mit_fester_Kopfzeile\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/HTMLTabellen_mit_fester_Kopfzeile\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/HTMLTabellen_mit_fester_Kopfzeile\\\/\",\"name\":\"HTML-Tabellen mit fester Kopfzeile - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/HTMLTabellen_mit_fester_Kopfzeile\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/HTMLTabellen_mit_fester_Kopfzeile\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/43162cba131a410fa9be77d77f244c35\",\"datePublished\":\"2020-05-13T20:54:35+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/HTMLTabellen_mit_fester_Kopfzeile\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/HTMLTabellen_mit_fester_Kopfzeile\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/HTMLTabellen_mit_fester_Kopfzeile\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/43162cba131a410fa9be77d77f244c35\",\"contentUrl\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/43162cba131a410fa9be77d77f244c35\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/HTMLTabellen_mit_fester_Kopfzeile\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"HTML-Tabellen mit fester Kopfzeile\"}]},{\"@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":"HTML-Tabellen mit fester Kopfzeile - 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\/HTMLTabellen_mit_fester_Kopfzeile\/","og_locale":"de_DE","og_type":"article","og_title":"HTML-Tabellen mit fester Kopfzeile","og_description":"In den vorherigen Ausgaben von Access im Unternehmen und in der aktuellen Ausgabe arbeiten wir in einigen Beitr&auml;gen mit dem Webbrowser-Steuerelement und stellen Daten, die wir mit den Bordmitteln von Access nicht ad&auml;quat darstellen k&ouml;nnen, mit HTML im Webbrowser-Steuerelement dar. Damit erhalten wir wesentlich flexiblere M&ouml;glichkeiten, aber auch der Aufwand steigt. Eine Anforderung, die bisher nicht erf&uuml;llt wurde, ist das Fixieren der obersten Zeile in einer Ansicht, in der wir zur Anzeige aller Daten nach unten scrollen mussten. Wie wir den Daten einer Tabelle eine fixe Kopfzeile hinzuf&uuml;gen, zeigen wir in diesem Beitrag.","og_url":"https:\/\/access-im-unternehmen.de\/HTMLTabellen_mit_fester_Kopfzeile\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-13T20:54:35+00:00","og_image":[{"url":"http:\/\/vg06.met.vgwort.de\/na\/43162cba131a410fa9be77d77f244c35","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"15\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/HTMLTabellen_mit_fester_Kopfzeile\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/HTMLTabellen_mit_fester_Kopfzeile\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"HTML-Tabellen mit fester Kopfzeile","datePublished":"2020-05-13T20:54:35+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/HTMLTabellen_mit_fester_Kopfzeile\/"},"wordCount":2172,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/HTMLTabellen_mit_fester_Kopfzeile\/#primaryimage"},"thumbnailUrl":"http:\/\/vg06.met.vgwort.de\/na\/43162cba131a410fa9be77d77f244c35","articleSection":["2019","3\/2019","Interaktiv"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/HTMLTabellen_mit_fester_Kopfzeile\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/HTMLTabellen_mit_fester_Kopfzeile\/","url":"https:\/\/access-im-unternehmen.de\/HTMLTabellen_mit_fester_Kopfzeile\/","name":"HTML-Tabellen mit fester Kopfzeile - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/HTMLTabellen_mit_fester_Kopfzeile\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/HTMLTabellen_mit_fester_Kopfzeile\/#primaryimage"},"thumbnailUrl":"http:\/\/vg06.met.vgwort.de\/na\/43162cba131a410fa9be77d77f244c35","datePublished":"2020-05-13T20:54:35+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/HTMLTabellen_mit_fester_Kopfzeile\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/HTMLTabellen_mit_fester_Kopfzeile\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/HTMLTabellen_mit_fester_Kopfzeile\/#primaryimage","url":"http:\/\/vg06.met.vgwort.de\/na\/43162cba131a410fa9be77d77f244c35","contentUrl":"http:\/\/vg06.met.vgwort.de\/na\/43162cba131a410fa9be77d77f244c35"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/HTMLTabellen_mit_fester_Kopfzeile\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"HTML-Tabellen mit fester Kopfzeile"}]},{"@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\/55001188","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=55001188"}],"version-history":[{"count":2,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001188\/revisions"}],"predecessor-version":[{"id":77001259,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001188\/revisions\/77001259"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001188"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001188"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001188"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}