{"id":55001169,"date":"2019-04-01T00:00:00","date_gmt":"2020-05-13T21:06:12","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1169"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Spalten_zweier_Datenblaetter_synchronisieren","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Spalten_zweier_Datenblaetter_synchronisieren\/","title":{"rendered":"Spalten zweier Datenbl&auml;tter synchronisieren"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg06.met.vgwort.de\/na\/5ddf756999a1411dad7cdfed85eadd01\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Im Beitrag &#8222;Neue Datens&auml;tze oben anf&uuml;gen&#8220; haben wir uns angesehen, wie Sie ein Unterformular in der Datenblattansicht, das nur einen leeren, neuen Datensatz anzeigt, &uuml;ber einem normalen Datenblatt mit den Daten der gleichen Tabelle platzieren. Damit erh&auml;lt der Benutzer die M&ouml;glichkeit, einen Datensatz oben einzuf&uuml;gen und nicht, wie sonst &uuml;blich, unten. Das Problem hierbei ist, dass der Benutzer immer noch die Spalten des oberen Formulars anders anordnen oder ihre Breite &auml;ndern kann. Das wirkt sich nicht automatisch auf die Spalten des darunter positionierten Formulars aus. Also m&uuml;ssen wir noch ein wenig Arbeit investieren, um dieses Verhalten zu dieser L&ouml;sung hinzuzuf&uuml;gen.<\/b><\/p>\n<p>Wir rufen uns zuerst noch einmal die Konstellation der L&ouml;sung aus dem Beitrag <b>Neue Datens&auml;tze oben anf&uuml;gen <\/b>(<b>www.access-im-unternehmen\/1160<\/b>) ins Ged&auml;chtnis. Hier haben wir ganz oben im Formular <b>frmArtikel <\/b>ein Unterformular mit geringer H&ouml;he platziert, welches nur die Spaltenk&ouml;pfe sowie eine einzige Zeile anzeigen soll, die den neuen, leeren Datensatz anzeigt, der sonst unten im Datenblatt angezeigt wird (siehe Bild 1).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_02\/pic_1169_001.png\" alt=\"Entwurf der beiden &uuml;bereinander angeordneten Unterformulare in der Datenblattansicht\" width=\"424,7115\" height=\"267,3185\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Entwurf der beiden &uuml;bereinander angeordneten Unterformulare in der Datenblattansicht<\/span><\/b><\/p>\n<p>Wenn wir in die Formularansicht wechseln, sehen wir, dass das obere Unterformular genau so platziert ist, dass die Spalten&uuml;berschriften des unteren Unterformulars nicht zu sehen sind. Dadurch erscheint die Ansicht so, als ob es sich tats&auml;chlich nur um ein Formular in der Datenblattansicht handelt, bei dem die Zeile zum Einf&uuml;gen eines neuen Datensatzes ganz oben angezeigt wird (siehe Bild 2).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_02\/pic_1169_002.png\" alt=\"Formularansicht der beiden Unterformulare in der Datenblattansicht\" width=\"424,7115\" height=\"267,3185\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Formularansicht der beiden Unterformulare in der Datenblattansicht<\/span><\/b><\/p>\n<p>Wenn wir nun allerdings die Breiten der Spalten&uuml;berschriften &auml;ndern oder deren Anordnung &auml;ndern, wirkt sich dies nur auf die Spaltenk&ouml;pfe selbst und die Zeile mit dem neuen Datensatz im oberen Unterformular aus (siehe Bild 3). Das Verhalten ist ganz normal, denn das untere Unterformular wei&szlig; ja nichts vom oberen Unterformular.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_02\/pic_1169_003.png\" alt=\"Das Anpassen der Spaltenk&ouml;pfe wirkt sich nicht auf das untere Formular aus.\" width=\"424,7115\" height=\"133,4808\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Das Anpassen der Spaltenk&ouml;pfe wirkt sich nicht auf das untere Formular aus.<\/span><\/b><\/p>\n<h2>Spalten synchron halten<\/h2>\n<p>Wenn wir wollen, dass die Spalten des unteren Unterformulars synchron mit den Spalten des oberen Unterformulars ge&auml;ndert werden, m&uuml;ssen wir die Ereignisse identifizieren, die beim &auml;ndern der Spaltenbreiten und beim &auml;ndern der Reihenfolge der Spalten ausgel&ouml;st werden. Wie finden wir diese heraus<\/p>\n<p>Falls uns kein Ereignis aufgrund seines Namens auff&auml;llt, legen wir f&uuml;r die m&ouml;glichen Ereignisse jeweils eine Ereignisprozedur an und f&uuml;gen darin entweder eine <b>Debug.Print<\/b>-Anweisung ein, die den Namen der Ereignisprozedur ausgibt, oder f&uuml;gen Haltepunkte zu den jeweiligen Prozedurk&ouml;pfen hinzu.<\/p>\n<p>Hier kommen die folgenden Ereigniseigenschaften in Frage:<\/p>\n<ul>\n<li><b>Beim Klicken<\/b><\/li>\n<li><b>Bei Maustaste ab<\/b><\/li>\n<li><b>Bei Maustaste auf<\/b><\/li>\n<li><b>Bei Mausbewegung<\/b><\/li>\n<\/ul>\n<p>Also hinterlegen wir testweise die folgenden Ereignisprozeduren f&uuml;r die Ereigniseigenschaften:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Click()\r\n     <span style=\"color:blue;\">Debug.Print<\/span> \"Beim Klicken\"\r\n<span style=\"color:blue;\">End Sub<\/span>\r\n<span style=\"color:blue;\">Private Sub <\/span>Form_MouseDown(Button<span style=\"color:blue;\"> As Integer<\/span>, _\r\n         Shift<span style=\"color:blue;\"> As Integer<\/span>, X<span style=\"color:blue;\"> As Single<\/span>, Y<span style=\"color:blue;\"> As Single<\/span>)\r\n     <span style=\"color:blue;\">Debug.Print<\/span> \"Bei Maustaste ab\"\r\n<span style=\"color:blue;\">End Sub<\/span>\r\n<span style=\"color:blue;\">Private Sub <\/span>Form_MouseMove(Button<span style=\"color:blue;\"> As Integer<\/span>, _\r\n         Shift<span style=\"color:blue;\"> As Integer<\/span>, X<span style=\"color:blue;\"> As Single<\/span>, Y<span style=\"color:blue;\"> As Single<\/span>)\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> Button = 0<span style=\"color:blue;\"> Then<\/span>\r\n         <span style=\"color:blue;\">Debug.Print<\/span> \"Bei Mausbewegung\"\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span>\r\n<span style=\"color:blue;\">Private Sub <\/span>Form_MouseUp(Button<span style=\"color:blue;\"> As Integer<\/span>, _\r\n         Shift<span style=\"color:blue;\"> As Integer<\/span>, X<span style=\"color:blue;\"> As Single<\/span>, Y<span style=\"color:blue;\"> As Single<\/span>)\r\n     <span style=\"color:blue;\">Debug.Print<\/span> \"Bei Maustaste auf\"\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Hier erkennen wir dann, dass diese Ereignisse immer ausgel&ouml;st werden, wenn der Benutzer auf einen der Bereiche mit Ausnahme der Felder zur Eingabe der Daten eine Aktion mit der Maus ausf&uuml;hrt &#8211; also in den Spaltenk&ouml;pfen, im Datensatzmarkierer und in dem grauen Bereich links von den Spaltenk&ouml;pfen und oberhalb des Datensatzmarkierers.<\/p>\n<h2>Wann synchronisieren<\/h2>\n<p><!--30percent--><\/p>\n<p>Bevor nun losprogrammieren, m&uuml;ssen wir noch festlegen, wann die Spalten des unteren Unterformulars an die des oberen Unterformulars angepasst werden sollen. Erledigen wir dies nur, wenn der Benutzer eine Aktion zum Vergr&ouml;&szlig;ern oder Verkleinern der Breite oder zum Verschieben einer Spalte durchgef&uuml;hrt hat (also beim Ereignis <b>Bei Maustaste auf<\/b>) oder immer, wenn der Benutzer die Maus bewegt Wir entscheiden uns zun&auml;chst f&uuml;r die erstere Methode. Wenn wir dann tats&auml;chlich die Synchronisierung zu jedem Zeitpunkt ausprobieren wollen, brauchen wir die entsprechenden Anweisungen ja nur noch in das Ereignis <b>Bei Mausbewegung <\/b>einzuf&uuml;gen.<\/p>\n<p>Der Ereignisprozedur <b>Bei Maustaste auf <\/b>f&uuml;gen wir nun den Aufruf der noch zu programmierenden Prozedur <b>SpaltenSynchronisieren <\/b>hinzu:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_MouseUp(Button<span style=\"color:blue;\"> As Integer<\/span>, _\r\n         Shift<span style=\"color:blue;\"> As Integer<\/span>, X<span style=\"color:blue;\"> As Single<\/span>, Y<span style=\"color:blue;\"> As Single<\/span>)\r\n     SpaltenSynchronisieren\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<h2>Prozedur zum Synchronisieren der Spalten<\/h2>\n<p>Die Prozedur zum Synchronisieren der Spalten k&ouml;nnten wir im oberen Unterformular <b>sfmArtikelNeu<\/b> implementieren. Allerdings m&uuml;ssten wir dann von dort aus das Unterformular, dessen Spalten wir manipulieren wollen, &uuml;ber das &uuml;bergeordnete Formular referenzieren. Das ist schlechter Programmierstil.<\/p>\n<p>Also programmieren wir diesmal gleich eine Klasse, mit der wir die beiden betroffenen Formulare referenzieren und die wir wiederum im Hauptformular deklarieren und instanzieren. Auf diese Weise haben wir erstens eine sauber programmierte L&ouml;sung und zweitens eine L&ouml;sung, die wir mit wenigen Zeilen Code in anderen Formularen wiederverwenden k&ouml;nnen.<\/p>\n<p>Also f&uuml;gen wir ein Klassenmodul namens <b>clsSpaltenSynchronisieren <\/b>zum VBA-Projekt hinzu. Dieses erh&auml;lt zwei private deklarierte Variablen, welche die Verweise auf die beiden betroffenen Unterformulare aufnehmen sollen. Beide Variablen versehen wir mit dem Schl&uuml;sselwort <b>With-Events<\/b>, damit wir f&uuml;r diese auch Ereignisse in der aktuellen Klasse implementieren k&ouml;nnen:<\/p>\n<pre><span style=\"color:blue;\">Private <\/span>WithEvents m_SubFormNeu<span style=\"color:blue;\"> As <\/span>Form\r\n<span style=\"color:blue;\">Private <\/span>WithEvents m_Subform<span style=\"color:blue;\"> As <\/span>Form<\/pre>\n<p>Damit die beiden Variablen mit den Verweisen auf die entsprechenden Unterformulare gef&uuml;llt werden k&ouml;nnen, legen wir noch zwei <b>Property Set<\/b>-Prozeduren an:<\/p>\n<pre><span style=\"color:blue;\">Public Property <span style=\"color:blue;\">Set<\/span> <\/span>SubformNeu(frm<span style=\"color:blue;\"> As <\/span>Form)\r\n     <span style=\"color:blue;\">Set<\/span> m_SubFormNeu = frm\r\n     <span style=\"color:blue;\">With<\/span> m_SubFormNeu\r\n         .OnMouseUp = \"[Event Procedure]\"\r\n     End <span style=\"color:blue;\">With<\/span>\r\n<span style=\"color:blue;\">End Property<\/span>\r\n<span style=\"color:blue;\">Public Property <span style=\"color:blue;\">Set<\/span> <\/span>Subform(frm<span style=\"color:blue;\"> As <\/span>Form)\r\n     <span style=\"color:blue;\">Set<\/span> m_Subform = frm\r\n<span style=\"color:blue;\">End Property<\/span><\/pre>\n<p>F&uuml;r das Formular in <b>m_SubFormNeu <\/b>legen wir noch den Wert <b>[Event Procedure] <\/b>f&uuml;r die Eigenschaft <b>OnMouseUp <\/b>fest. So wei&szlig; die Klasse auch, dass das Ereignis hier ausgef&uuml;hrt werden soll.<\/p>\n<h2>Vorbereitung des Hauptformulars<\/h2>\n<p>Damit wir gleich testen k&ouml;nnen, w&auml;hrend wir die Prozedur zum Synchronisieren der Spalten programmieren, f&uuml;gen wir dem Klassenmodul des Hauptformulars direkt die notwendigen Elemente hinzu. Als Erstes eine Objektvariable f&uuml;r die Klasse <b>objSpaltenSynchronisieren<\/b>:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>objSpaltenSynchronisieren<span style=\"color:blue;\"> As <\/span>clsSpaltenSynchronisieren<\/pre>\n<p>Dann erweitern wir die Ereignisprozedur <b>Form_Load <\/b>um die folgenden Zeilen, in denen wir <b>clsSpaltenSynchronisieren <\/b>instanzieren und die beiden Eigenschaften f&uuml;r das obere und das untere Unterformular f&uuml;llen:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Load()\r\n     ...\r\n     <span style=\"color:blue;\">Set<\/span> objSpaltenSynchronisieren =  <span style=\"color:blue;\">New<\/span> clsSpaltenSynchronisieren\r\n     <span style=\"color:blue;\">With<\/span> objSpaltenSynchronisieren\r\n         <span style=\"color:blue;\">Set<\/span> .Subform = Me!sfmArtikel.Form\r\n         <span style=\"color:blue;\">Set<\/span> .SubformNeu = Me.sfmArtikelNeu.Form\r\n     End <span style=\"color:blue;\">With<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<h2>Ereignisse in der Klasse clsSpaltenSynchronisieren<\/h2>\n<p>In der Klasse <b>clsSpaltenSynchronisieren <\/b>legen wir nun die Ereignisprozedur an, die beim Loslassen der Maustaste auf einem der Spaltenk&ouml;pfe ausgel&ouml;st werden soll. Diese f&uuml;gen wir f&uuml;r die Objektvariable <b>m_SubFormNeu <\/b>hinzu.<\/p>\n<p>Dazu w&auml;hlen Sie im linken Kombinationsfeld des Codefensters den Eintrag <b>m_SubFormNeu <\/b>aus und im rechten den Eintrag <b>MouseUp<\/b>. Die so hinzugef&uuml;gte Ereignisprozedur erweitern wir wie folgt:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>m_SubFormNeu_MouseUp(Button<span style=\"color:blue;\"> As Integer<\/span>,  Shift<span style=\"color:blue;\"> As Integer<\/span>, X<span style=\"color:blue;\"> As Single<\/span>, Y<span style=\"color:blue;\"> As Single<\/span>)\r\n     SpaltenSynchronisieren\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<h2>Die Prozedur SpaltenSynchronisieren<\/h2>\n<p>Nun schauen wir uns an, wie wir die Prozedur <b>SpaltenSynchronisieren<\/b> programmieren m&uuml;ssen. Diese sieht im ersten Entwurf wie in Listing 1 aus. Hier durchlaufen wir alle Steuerelemente des oberen Unterformulars und pr&uuml;fen, ob seine Eigenschaft <b>Steuerelementinhalt <\/b>(unter VBA <b>ControlSource<\/b>) einen Wert enth&auml;lt. Dazu fragen wir die Eigenschaft <b>ControlSource <\/b>ab und tragen den Wert in die Variable <b>strControlSource <\/b>ein.<\/p>\n<p>Treffen wir in der <b>For Each<\/b>-Schleife etwa auf ein Bezeichnungsfeld, f&uuml;hrt der Zugriff auf die Eigenschaft <b>ControlSource <\/b>zu einem Fehler, da die Eigenschaft f&uuml;r diesen Steuerelementtyp gar nicht definiert ist.<\/p>\n<p>Deshalb fassen wir die Anweisung zum Abfragen des Steuerelementinhalts in <b>On Error Resume Next <\/b>und <b>On Error Goto 0 <\/b>ein, um f&uuml;r diesen Fall einen Laufzeitfehler zu verhindern. Hat <b>strControlSource<\/b>, das wir vor dem Versuch, es mit der Eigenschaft <b>ControlSource <\/b>zu f&uuml;llen, noch leeren, danach einen Wert, handelt es sich bei dem aktuellen Steuer-element um ein gebundenes Steuer-element. In diesem Fall pr&uuml;fen wir, ob es ein Textfeld, ein Kombinationsfeld oder ein Kontrollk&auml;stchen ist und weisen es einer Variablen mit dem passenden Typ zu. Dann stellen wir die Eigenschaften <b>ColumnWidth <\/b>und <b>ColumnOrder <\/b>des gleichnamigen Steuerelements im unteren Unterformular auf den Wert der Eigenschaft im oberen Unterformular ein.<\/p>\n<p>Damit gelingen zwei Operationen bereits ohne Probleme: Das Einstellen der Spaltenbreiten im unteren Unterformular nach dem Ziehen der Breite im oberen Unterformular sowie das Einstellen der Reihenfolge nach dem Verschieben eines Elements im oberen Formular.<\/p>\n<h2>Automatische Gr&ouml;&szlig;e per Doppelklick<\/h2>\n<p>Es gibt aber noch eine weitere M&ouml;glichkeit, die Spaltenbreite einzustellen, und zwar per Doppelklick auf den schmalen Streifen zwischen zwei Spalten. Danach stellt Access die Breite der linken Spalte automatisch auf den optimalen Wert ein &#8211; gemessen an den Inhalten der Spalten&uuml;berschrift und der darunter liegenden Datens&auml;tze. Nun ergibt sich allerdings das Problem, dass wir, wenn wir nun doppelt auf einen der Spaltenzwischenr&auml;ume im oberen Formular klicken, nur die Breite der Spalte im oberen Formular optimieren. Dabei kann es nat&uuml;rlich passieren, dass die Breite der Spalten&uuml;berschrift schmaler ist als die Breite der sichtbaren Eintr&auml;ge in der gleichen Spalte des Unterformulars &#8211; die Eintr&auml;ge sind dann nicht mehr komplett sichtbar, wie es normalerweise der Fall sein sollte.<\/p>\n<p>Interessant ist jedoch, was dort geschieht: Normalerweise wird die Spaltenbreite auf <b>-2 <\/b>eingestellt, wenn man mit einem Doppelklick auf den Spaltenzwischenraum die optimierte Spaltenbreite erhalten m&ouml;chte. Wenn wir diesen Wert auf die Spalten im unteren Formular &uuml;bertragen, m&uuml;sste dort auch <b>-2 <\/b>eingestellt werden, was aber nicht der Fall zu sein scheint, denn es werden ja nicht alle Eintr&auml;ge komplett angezeigt (wenn die Spalten&uuml;berschrift weniger breit als die Inhalte der Spalte selbst ist). Stattdessen wird die Spalte im Unterformular auf einen Zahlenwert eingestellt, welcher der Breite der Spaltenbreite im oberen Unterformular entspricht, zum Beispiel <b>1575<\/b>.<\/p>\n<p>Was tun wir, um der automatischen Anpassung der Spaltenbreite in beiden Formularen gerecht zu werden Dazu f&uuml;gen wir zun&auml;chst die folgende Variable zum Klassenmodul hinzu:<\/p>\n<pre><span style=\"color:blue;\">Private <\/span>bolDblClick<span style=\"color:blue;\"> As Boolean<\/span><\/pre>\n<p>Dann legen wir eine Ereignisprozedur an, die beim Doppelklick auf das obere Formular feuert und die Variable <b>bolDblClick <\/b>auf <b>True <\/b>einstellt:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>m_SubFormNeu_DblClick(Cancel<span style=\"color:blue;\"> As Integer<\/span>)\r\n     bolDblClick = <span style=\"color:blue;\">True<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>In der Ereignisprozedur, welche die Spaltenbreiten des unteren Formulars an die Spaltenbreiten des oberen Formulars anpasst, f&uuml;gen wir eine zus&auml;tzliche Pr&uuml;fung hinter der <b>Select Case<\/b>-Bedingung ein. Diese untersucht, ob <b>bolDblClick <\/b>den Wert <b>True <\/b>hat. In diesem Fall m&uuml;ssen wir uns die Spaltenbreiten oben und unten f&uuml;r das ausl&ouml;sende Feld anschauen. Die Spaltenbreite oben speichern wir zuerst in <b>lngWidthMax<\/b>.<\/p>\n<p>Ist dann die Spaltenbreite unten gr&ouml;&szlig;er, speichern wir diese in <b>lngWidthMax<\/b>. Dann stellen wir die untere Spalte auf optimale Spaltenbreite ein (mit <b>ColumnWidth = -2<\/b>). Ist die untere Spalte nun breiter als <b>lngWidthMax<\/b>, tragen wir diese Breite in <b>lngWidthMax <\/b>ein. Damit enth&auml;lt <b>lngWidthMax <\/b>nun die gr&ouml;&szlig;ere der beiden optimalen Breiten und wir k&ouml;nnen diese Breite der oberen und der unteren Spalte zuweisen.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>SpaltenZweierDatenblaetterSynchronisieren.accdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/C2BC1F92-3570-4A43-A89F-01AF9C6638ED\/aiu_1169.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Im Beitrag &#8222;Neue Datens&auml;tze oben anf&uuml;gen&#8220; haben wir uns angesehen, wie Sie ein Unterformular in der Datenblattansicht, das nur einen leeren, neuen Datensatz anzeigt, &uuml;ber einem normalen Datenblatt mit den Daten der gleichen Tabelle platzieren. Damit erh&auml;lt der Benutzer die M&ouml;glichkeit, einen Datensatz oben einzuf&uuml;gen und nicht, wie sonst &uuml;blich, unten. Das Problem hierbei ist, dass der Benutzer immer noch die Spalten des oberen Formulars anders anordnen oder ihre Breite &auml;ndern kann. Das wirkt sich nicht automatisch auf die Spalten des darunter positionierten Formulars aus. Also m&uuml;ssen wir noch ein wenig Arbeit investieren, um dieses Verhalten zu dieser L&ouml;sung hinzuzuf&uuml;gen.<\/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":[66022019,662019,44000023],"tags":[],"class_list":["post-55001169","post","type-post","status-publish","format-standard","hentry","category-66022019","category-662019","category-Mit_Formularen_arbeiten"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Spalten zweier Datenbl&auml;tter synchronisieren - 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\/Spalten_zweier_Datenblaetter_synchronisieren\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Spalten zweier Datenbl&auml;tter synchronisieren\" \/>\n<meta property=\"og:description\" content=\"Im Beitrag &quot;Neue Datens&auml;tze oben anf&uuml;gen&quot; haben wir uns angesehen, wie Sie ein Unterformular in der Datenblattansicht, das nur einen leeren, neuen Datensatz anzeigt, &uuml;ber einem normalen Datenblatt mit den Daten der gleichen Tabelle platzieren. Damit erh&auml;lt der Benutzer die M&ouml;glichkeit, einen Datensatz oben einzuf&uuml;gen und nicht, wie sonst &uuml;blich, unten. Das Problem hierbei ist, dass der Benutzer immer noch die Spalten des oberen Formulars anders anordnen oder ihre Breite &auml;ndern kann. Das wirkt sich nicht automatisch auf die Spalten des darunter positionierten Formulars aus. Also m&uuml;ssen wir noch ein wenig Arbeit investieren, um dieses Verhalten zu dieser L&ouml;sung hinzuzuf&uuml;gen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Spalten_zweier_Datenblaetter_synchronisieren\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-13T21:06:12+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg06.met.vgwort.de\/na\/5ddf756999a1411dad7cdfed85eadd01\" \/>\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=\"10\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Spalten_zweier_Datenblaetter_synchronisieren\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Spalten_zweier_Datenblaetter_synchronisieren\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Spalten zweier Datenbl&auml;tter synchronisieren\",\"datePublished\":\"2020-05-13T21:06:12+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Spalten_zweier_Datenblaetter_synchronisieren\\\/\"},\"wordCount\":1731,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Spalten_zweier_Datenblaetter_synchronisieren\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/5ddf756999a1411dad7cdfed85eadd01\",\"articleSection\":[\"2\\\/2019\",\"2019\",\"Mit Formularen arbeiten\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Spalten_zweier_Datenblaetter_synchronisieren\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Spalten_zweier_Datenblaetter_synchronisieren\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Spalten_zweier_Datenblaetter_synchronisieren\\\/\",\"name\":\"Spalten zweier Datenbl&auml;tter synchronisieren - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Spalten_zweier_Datenblaetter_synchronisieren\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Spalten_zweier_Datenblaetter_synchronisieren\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/5ddf756999a1411dad7cdfed85eadd01\",\"datePublished\":\"2020-05-13T21:06:12+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Spalten_zweier_Datenblaetter_synchronisieren\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Spalten_zweier_Datenblaetter_synchronisieren\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Spalten_zweier_Datenblaetter_synchronisieren\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/5ddf756999a1411dad7cdfed85eadd01\",\"contentUrl\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/5ddf756999a1411dad7cdfed85eadd01\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Spalten_zweier_Datenblaetter_synchronisieren\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Spalten zweier Datenbl&auml;tter synchronisieren\"}]},{\"@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":"Spalten zweier Datenbl&auml;tter synchronisieren - 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\/Spalten_zweier_Datenblaetter_synchronisieren\/","og_locale":"de_DE","og_type":"article","og_title":"Spalten zweier Datenbl&auml;tter synchronisieren","og_description":"Im Beitrag \"Neue Datens&auml;tze oben anf&uuml;gen\" haben wir uns angesehen, wie Sie ein Unterformular in der Datenblattansicht, das nur einen leeren, neuen Datensatz anzeigt, &uuml;ber einem normalen Datenblatt mit den Daten der gleichen Tabelle platzieren. Damit erh&auml;lt der Benutzer die M&ouml;glichkeit, einen Datensatz oben einzuf&uuml;gen und nicht, wie sonst &uuml;blich, unten. Das Problem hierbei ist, dass der Benutzer immer noch die Spalten des oberen Formulars anders anordnen oder ihre Breite &auml;ndern kann. Das wirkt sich nicht automatisch auf die Spalten des darunter positionierten Formulars aus. Also m&uuml;ssen wir noch ein wenig Arbeit investieren, um dieses Verhalten zu dieser L&ouml;sung hinzuzuf&uuml;gen.","og_url":"https:\/\/access-im-unternehmen.de\/Spalten_zweier_Datenblaetter_synchronisieren\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-13T21:06:12+00:00","og_image":[{"url":"http:\/\/vg06.met.vgwort.de\/na\/5ddf756999a1411dad7cdfed85eadd01","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"10\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Spalten_zweier_Datenblaetter_synchronisieren\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Spalten_zweier_Datenblaetter_synchronisieren\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Spalten zweier Datenbl&auml;tter synchronisieren","datePublished":"2020-05-13T21:06:12+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Spalten_zweier_Datenblaetter_synchronisieren\/"},"wordCount":1731,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Spalten_zweier_Datenblaetter_synchronisieren\/#primaryimage"},"thumbnailUrl":"http:\/\/vg06.met.vgwort.de\/na\/5ddf756999a1411dad7cdfed85eadd01","articleSection":["2\/2019","2019","Mit Formularen arbeiten"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Spalten_zweier_Datenblaetter_synchronisieren\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Spalten_zweier_Datenblaetter_synchronisieren\/","url":"https:\/\/access-im-unternehmen.de\/Spalten_zweier_Datenblaetter_synchronisieren\/","name":"Spalten zweier Datenbl&auml;tter synchronisieren - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Spalten_zweier_Datenblaetter_synchronisieren\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Spalten_zweier_Datenblaetter_synchronisieren\/#primaryimage"},"thumbnailUrl":"http:\/\/vg06.met.vgwort.de\/na\/5ddf756999a1411dad7cdfed85eadd01","datePublished":"2020-05-13T21:06:12+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Spalten_zweier_Datenblaetter_synchronisieren\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Spalten_zweier_Datenblaetter_synchronisieren\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Spalten_zweier_Datenblaetter_synchronisieren\/#primaryimage","url":"http:\/\/vg06.met.vgwort.de\/na\/5ddf756999a1411dad7cdfed85eadd01","contentUrl":"http:\/\/vg06.met.vgwort.de\/na\/5ddf756999a1411dad7cdfed85eadd01"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Spalten_zweier_Datenblaetter_synchronisieren\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Spalten zweier Datenbl&auml;tter synchronisieren"}]},{"@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\/55001169","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=55001169"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001169\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001169"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001169"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001169"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}