{"id":55000901,"date":"2013-10-01T00:00:00","date_gmt":"2020-05-22T21:30:24","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=901"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Datenblattmarkierungen","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Datenblattmarkierungen\/","title":{"rendered":"Datenblattmarkierungen"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg05.met.vgwort.de\/na\/b216ca2069484071b85200317c55b05c\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Wenn Sie Formular in der Datenblattansicht anzeigen, bietet die Benutzeroberfl&auml;che von Access bereits alles N&ouml;tige, um damit zu arbeiten. Alles N&ouml;tige Nein: Es gibt noch eine Reihe Dinge, die Sie mit dem Datenblatt anstellen k&ouml;nnen &#8211; zum Beispiel das Auslesen oder Einstellen von Markierungen. Dieser Beitrag zeigt, wie Sie die aktuell markierten Zellen im Datenblatt ermitteln und diese nach Ihren W&uuml;nschen einstellen. Au&szlig;erdem packen wir die dazu notwendige Funktionalit&auml;t in eine wiederverwendbare Klasse.<\/b><\/p>\n<p><b>Datenblatt im Formular<\/b><\/p>\n<p>Das Anlegen eines Formular, das seine Daten in der Datenblattansicht anzeigt, gelingt schnell: Sie brauchen lediglich ein neues Formular anzulegen, die gew&uuml;nschte Tabelle oder Abfrage als Datenherkunft festzulegen, alle ben&ouml;tigten Felder aus der Feldliste in den Detailbereich des Formularentwurfs zu ziehen und als Standardansicht den Wert Datenblatt auszuw&auml;hlen &#8211; schon liefert das Formular beim erneuten &ouml;ffnen die ersehnte Ansicht.<\/p>\n<p>In Bild 1 landen beispielsweise gerade die Felder der Tabelle <b>tblArtikel <\/b>im Detailbereich. Im Gegensatz zur Formular- oder Endlosansicht k&ouml;nnen Sie neben den Zeilen und Spalten keine weiteren Elemente wie eine <b>OK<\/b>-Schaltfl&auml;che im Formular unterbringen, weshalb ein Formular in der Datenblattansicht &uuml;blicherweise als Unterformular in einem weiteren Formular landet, welches die ben&ouml;tigten Steuerelemente enth&auml;lt (s. Bild 2).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_05\/pic_901_001.png\" alt=\"Hinzuf&uuml;gen der Felder f&uuml;r die Datenblattansicht\" width=\"395\" height=\"267,7377\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Hinzuf&uuml;gen der Felder f&uuml;r die Datenblattansicht<\/span><\/b><\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_05\/pic_901_002.png\" alt=\"Datenblatt als Unterformular\" width=\"570\" height=\"345,6467\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Datenblatt als Unterformular<\/span><\/b><\/p>\n<p><b>Markierungsarten<\/b><\/p>\n<p>Die Datenblattansicht bietet gleich eine ganze Reihe von M&ouml;glichkeiten, um bestimmte Bereiche mit der Maus zu markieren:<\/p>\n<ul>\n<li>Markieren eines einzelnen Feldes durch Anklicken des Feldes<\/li>\n<li>Markieren einer kompletten Zeile durch Anklicken des Zeilenkopfes\/Datensatzmarkierers<\/li>\n<li>Markieren einer kompletten Spalte durch Anklicken des Spaltenkopfes<\/li>\n<li>Markieren mehrerer zusammenh&auml;ngender Zeilen durch Anklicken des ersten Zeilenkopfes und Ziehen der Maus bis zum Zeilenkopf der letzten zu markierenden Zeile oder durch Anklicken des ersten Zeilenkopfes und Anklicken des letzten Zeilenkopfes bei gedr&uuml;ckter Umschalttaste<\/li>\n<li>Markieren mehrere zusammenh&auml;ngender Spalten durch Anklicken des ersten Spaltenkopfes und Ziehen der Maus bis zum Spaltenkopf der letzten zu markierenden Spalte oder durch Anklicken des ersten Spaltenkopfes und Anklicken des letzten Spaltenkopfes bei gedr&uuml;ckter Umschalttaste<\/li>\n<li>Markieren mehrere nebeneinanderliegender oder &uuml;bereinanderliegender Zellen durch Anklicken der ersten Zelle und dann bei gedr&uuml;ckter Umschalttaste Anklicken der letzten Zelle<\/li>\n<li>Markieren einer Matrix von Zellen, erfolgt ebenfalls durch das Markieren der ersten und der letzten Zelle bei gedr&uuml;ckter Umschalttaste<\/li>\n<\/ul>\n<p><b>Aktuelle Markierung ermitteln<\/b><\/p>\n<p>Nun m&ouml;chten wir ermitteln, welche Zellen der Benutzer markiert hat. Dazu verwenden Sie vier Eigenschaften des Formulars:<\/p>\n<ul>\n<li><b>SelLeft<\/b>: Index der Spalte des ersten markierten Elements<\/li>\n<li><b>SelWidth<\/b>: Anzahl der markierten Spalten<\/li>\n<li><b>SelTop<\/b>: Index der Zeile des ersten markierten Elements<\/li>\n<li><b>SelHeight<\/b>: Anzahl der markierten Spalten<\/li>\n<\/ul>\n<p>F&uuml;r ein paar Experimente haben wir dem Hauptformular <b>frmArtikel <\/b>vier Textfelder namens <b>txtSelLeft<\/b>, <b>txtSelWidth<\/b>, <b>txtSelTop <\/b>und <b>txtSelHeight <\/b>hinzugef&uuml;gt (s. Bild 3). Die Schaltfl&auml;che <b>cmdAktualisieren <\/b>liest per Mausklick die Koordinaten der aktuellen Markierung im Unterformular ein und schreibt diese in die entsprechenden Textfelder (s. Listing 1).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_05\/pic_901_003.png\" alt=\"Ermitteln der Koordinaten der aktuellen Markierung\" width=\"395\" height=\"187,1053\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Ermitteln der Koordinaten der aktuellen Markierung<\/span><\/b><\/p>\n<p>Aber was ist das Die beiden Felder <b>txtSelWidth <\/b>und <b>txtSelHeight <\/b>zeigen immer den Wert <b>0 <\/b>an Dies liegt daran, dass die Markierung beim Anklicken der Schaltfl&auml;che <b>cmdAktualisieren <\/b>entfernt wird und nur noch die Einf&uuml;gemarke in der oberen linken Zelle der Markierung verbleibt. Was tun Wir m&uuml;ssen die Markierung ermitteln, ohne dass diese gel&ouml;scht wird.<\/p>\n<p><b>Markierung direkt ermitteln<\/b><\/p>\n<p>Um die Markierung direkt beim Festlegen zu ermitteln, m&uuml;ssen wir einen geeigneten Zeitpunkt abpassen oder noch besser ein passendes Ereignis. Wir verwenden das Ereignis <b>Bei Maustaste auf<\/b>, das beim Loslassen der Maustaste ausgel&ouml;st wird.  Aber f&uuml;r welches Objekt legen wir dieses Ereignis fest Probieren wir es doch zun&auml;chst mit dem Unterformular selbst aus. Legen Sie also f&uuml;r das Unterformular <b>sfmArtikel <\/b>den Wert <b>[Ereignisprozedur] <\/b>f&uuml;r die Eigenschaft <b>Bei Maustaste <\/b>auf an, klicken Sie auf die Schaltfl&auml;che mit den drei Punkten und legen Sie die Ereignisprozedur aus Listing 2 an.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_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     <span style=\"color:blue;\">With<\/span> Me\r\n         .Parent.txtSel<span style=\"color:blue;\">Left<\/span> = .SelLeft\r\n         .Parent.txtSelWidth = .SelWidth\r\n         .Parent.txtSelTop = .SelTop\r\n         .Parent.txtSelHeight = .SelHeight\r\n     End <span style=\"color:blue;\">With<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 2: Auslesen der Markierung beim Ereignis Bei Maustaste auf des Formulars in der Datenblattansicht<\/span><\/b><\/p>\n<p>Dies funktioniert &#8211; zumindest schon einmal f&uuml;r das komplett markierte Datenblatt (s. Bild 4). Eine Frage bleibt allerdings noch: Warum liefert <b>SelLeft <\/b>immer den Wert <b>2 <\/b>&#8211; und welche ist die erste Spalte im Datenblatt Wir konnten keine Antwort auf diese Frage finden &#8211; selbst die Onlinehilfe schweigt sich dar&uuml;ber aus und gibt stattdessen an, dass <b>SelLeft <\/b>einen Wert zwischen <b>1 <\/b>und der Spaltenanzahl des Datenblattes liefert.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_05\/pic_901_004.png\" alt=\"Die komplette Markierung wird gleich nach dem Loslassen der Maustaste angezeigt.\" width=\"395\" height=\"220,7353\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Die komplette Markierung wird gleich nach dem Loslassen der Maustaste angezeigt.<\/span><\/b><\/p>\n<p>Und warum liefert die Eigenschaft <b>SelHeight <\/b>den Wert <b>78<\/b>, obwohl das Datenblatt nur <b>77 <\/b>Datens&auml;tze anzeigt Diese Antwort f&auml;llt leichter: Weil die zugrunde liegende Tabelle\/Abfrage aktualisierbar ist und daher immer ein neuer, leerer Datensatz im Datenblatt angezeigt und auch als Datensatz mitgez&auml;hlt wird.<\/p>\n<p><b>Zellengenaue Markierung einlesen<\/b><\/p>\n<p>Fehlt noch die M&ouml;glichkeit, auch die Markierung einzulesen, wenn der Benutzer beispielsweise zwei Zellen mitten in der Tabelle markiert oder eine Matrix von vier mal vier Zellen.<\/p>\n<p>Wir k&ouml;nnen den L&ouml;sungsansatz von oben &uuml;bernehmen: Es gelingt ganz einfach mit einer Prozedur, die durch das Ereignis <b>Bei Maustaste auf <\/b>ausgel&ouml;st wird. Allerdings m&uuml;ssten wir dieses nun f&uuml;r alle Steuerelemente anlegen.<\/p>\n<p>Probieren wir es doch zun&auml;chst einmal f&uuml;r das erste Textfeld <b>ArtikelID<\/b>. Legen Sie das Ereignisprozedur &uuml;ber das Eigenschaftsfenster an (s. Bild 5).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_05\/pic_901_005.png\" alt=\"Anlegen des Bei Maustaste auf-Ereignisses f&uuml;r ein Textfeld des Datenblatts\" width=\"570\" height=\"369,7298\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Anlegen des Bei Maustaste auf-Ereignisses f&uuml;r ein Textfeld des Datenblatts<\/span><\/b><\/p>\n<p>Dann f&uuml;llen Sie die entstandene Prozedur wie in Listing 3. Dies funktioniert &#8211; allerdings m&uuml;ssten wir nun f&uuml;r zehn verschiedene Steuerelemente (in diesem Beispiel &#8211; gegebenenfalls sogar noch mehr) die gleiche Ereignisprozedur anlegen. Das k&ouml;nnen Sie nun tun &#8211; aber wenn Sie die Funktionalit&auml;t auch noch in weiteren Formularen nutzen m&ouml;chten, m&uuml;ssen Sie diesen Vorgang jedes Mal wiederholen.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>ArtikelID_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>, _\r\n         Y<span style=\"color:blue;\"> As Single<\/span>)\r\n     <span style=\"color:blue;\">With<\/span> Me\r\n         .Parent.txtSel<span style=\"color:blue;\">Left<\/span> = .SelLeft\r\n         .Parent.txtSelWidth = .SelWidth\r\n         .Parent.txtSelTop = .SelTop\r\n         .Parent.txtSelHeight = .SelHeight\r\n     End <span style=\"color:blue;\">With<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 3: Auslesen der Datenblattmarkierung nach dem Anklicken eines der Elemente der Spalte ArtikelID.<\/span><\/b><\/p>\n<p><b>Markierung mit Klasse<\/b><\/p>\n<p>Also bauen wir uns zwei Klassenmodule, in die wir die Funktionalit&auml;t kapseln. Wir wollen dann vom Hauptformular aus nur noch wenige Zeilen Code schreiben, um st&auml;ndig an die Markierung im Datenblatt zu kommen &#8211; und au&szlig;erdem ganz einfach auf die Koordinaten der Markierungen zugreifen k&ouml;nnen.<\/p>\n<p>Das Beispiel zum Einbau dieser Klasse finden Sie in den beiden Formularen <b>frmArtikel_Klasse <\/b>und <b>sfmArtikel_Klasse<\/b>. F&uuml;r das Hauptformular m&uuml;ssen Sie ohnehin ein Klassenmodul anlegen, f&uuml;r das Unterformular auch &#8211; anderenfalls kann die Klasse nicht die Ereignisse des Unterformulars und der enthaltenen Steuerelemente nutzen.<\/p>\n<p><b>Einbau in Haupt- und Unterformular<\/b><\/p>\n<p>Um die beiden Klassen zu integrieren, ben&ouml;tigen Sie zun&auml;chst eine Objektvariable, welche den Verweis auf das Objekt auf Basis der Klasse <b>clsDatasheetSelectionForm <\/b>speichert.<\/p>\n<p>Die Klasse stellt ein Ereignis bereit, das beim &auml;ndern der Markierung ausgel&ouml;st wird &#8211; also m&uuml;ssen wir die Objektvariable mit dem Schl&uuml;sselwort <b>WithEvents <\/b>deklarieren:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>WithEvents objDatasheetSelection <span style=\"color:blue;\"> As <\/span>clsDatasheetSelectionForm<\/pre>\n<p>Als n&auml;chstes sorgen Sie daf&uuml;r, dass die Klasse instanziert wird und erf&auml;hrt, f&uuml;r welches Formular es die &auml;nderungen der Datenblattmarkierung &uuml;berpr&uuml;fen und gegebenenfalls Ereignisse ausl&ouml;sen soll.<\/p>\n<p>Dies erledigen Sie in der durch das Ereignis <b>Beim Laden <\/b>des Hauptformulars ausgel&ouml;sten Prozedur aus Listing 4.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Load()\r\n     <span style=\"color:blue;\">Set<\/span> objDatasheetSelection = <span style=\"color:blue;\">New<\/span> clsDatasheetSelectionForm\r\n     <span style=\"color:blue;\">With<\/span> objDatasheetSelection\r\n         <span style=\"color:blue;\">Set<\/span> .Form = Me!sfmArtikel_Klasse.Form\r\n     End <span style=\"color:blue;\">With<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><!--30percent--><\/p>\n<p><b><span style=\"color:darkgrey;\">Listing 4: Instanzieren und f&uuml;llen der Klasse zum &uuml;berwachen der Markierung des Datenblatts<\/span><\/b><\/p>\n<p>Nun haben wir von einem Ereignis gesprochen, dass die Klasse <b>clsDatasheetSelectionForm <\/b>bereitstellt. Dieses f&uuml;gen Sie zum Klassenmodul des Formulars hinzu, indem Sie im linken Kombinationsfeld des Codefensters des Klassenmoduls den Eintrag <b>objDatasheetSelection <\/b>ausw&auml;hlen und rechts den Namen der zu implementierenden Ereignisprozedur, hier <b>SelectionChanged<\/b> (s. Bild 6).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_05\/pic_901_006.png\" alt=\"Anlegen des einzigen Ereignisses des Objekts objDatasheetSelection\" width=\"570\" height=\"244,7282\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Anlegen des einzigen Ereignisses des Objekts objDatasheetSelection<\/span><\/b><\/p>\n<p>Die dadurch angelegte Ereignisprozedur, die mit den Parametern <b>intSelLeft<\/b>, <b>intSelWidth<\/b>, <b>intSelTop <\/b>und <b>intSelHeight <\/b>die Position und die H&ouml;he und Breite der Markierung zur&uuml;ckliefert, f&uuml;llen Sie f&uuml;r dieses Beispiel mit den vier Anweisungen aus Listing 5. Die Anweisungen f&uuml;llen die Textfelder des Formulars mit den Markierungskoordinaten.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>objDatasheetSelection_SelectionChanged(intSelLeft<span style=\"color:blue;\"> As Integer<\/span>, _\r\n         intSelWidth<span style=\"color:blue;\"> As Integer<\/span>, intSelTop<span style=\"color:blue;\"> As Integer<\/span>, intSelHeight<span style=\"color:blue;\"> As Integer<\/span>)\r\n     Me!txtSel<span style=\"color:blue;\">Left<\/span> = intSelLeft\r\n     Me!txtSelWidth = intSelWidth\r\n     Me!txtSelTop = intSelTop\r\n     Me!txtSelHeight = intSelHeight\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 5: Implementierung der Ereignisprozedur SelectionChanged der Klasse clsDatasheetSelectionForm<\/span><\/b><\/p>\n<p><b>Die Klasse clsDatasheetSelectionForm<\/b><\/p>\n<p>Die erste Klasse <b>clsDatasheetSelectionForm <\/b>hat die Hauptaufgabe, auf das <b>MouseUp<\/b>-Ereignis des angegebenen Formulars zu reagieren und das oben beschriebene Ereignis auszul&ouml;sen. Au&szlig;erdem soll es beim Instanzieren f&uuml;r jedes im Formular enthaltene Steuerelement ein Objekt des Typs <b>clsDatasheetSelectionControl <\/b>anlegen und diese in einer <b>Collection <\/b>speichern. Diese wiederum sollen auf das <b>MouseUp<\/b>-Ereignis der Steuerelemente horchen und der Klasse <b>clsDatasheetSelectionForm <\/b>mitteilen, wenn ein solches Ereignis in einem der Formulare eingetreten ist.<\/p>\n<p>Die Klasse <b>clsDatasheetSelection <\/b>deklariert zu diesem Zweck zun&auml;chst die folgenden beiden Variablen:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>WithEvents m_Form<span style=\"color:blue;\"> As <\/span>Form\r\n<span style=\"color:blue;\">Dim <\/span>colControls<span style=\"color:blue;\"> As <\/span>Collection<\/pre>\n<p><b>m_Form<\/b> speichert einen Verweis auf das zu &uuml;berwachende Formular (mit <b>WithEvents<\/b>, da das <b>MouseUp<\/b>-Ereignis ja implementiert werden soll), <b>colControls <\/b>die Objekte, die f&uuml;r jedes der Steuerelemente des Formulars angelegt werden.<\/p>\n<p>Den Hauptteil der Arbeit in der Klasse <b>clsDatasheetSelectionForm <\/b>erledigt die <b>Property Set<\/b>-Methode aus Listing 6. Sie erwartet zun&auml;chst den Verweis auf das zu verwendende Formular in der Datenblattansicht und weist diesen der Variablen <b>m_Form <\/b>zu. Da das <b>MouseUp<\/b>-Ereignis implementiert werden soll, erh&auml;lt die Eigenschaft <b>OnMouseUp <\/b>den Wert <b>[Event Procedure]<\/b>.<\/p>\n<pre><span style=\"color:blue;\">Public Property <span style=\"color:blue;\">Set<\/span> <\/span>Form(frm<span style=\"color:blue;\"> As <\/span>Form)\r\n     <span style=\"color:blue;\">Dim <\/span>ctl<span style=\"color:blue;\"> As <\/span>Control\r\n     <span style=\"color:blue;\">Dim <\/span>strControlsource<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>objDatasheetSelectionControl<span style=\"color:blue;\"> As <\/span>clsDatasheetSelectionControl\r\n     <span style=\"color:blue;\">Set<\/span> m_Form = frm\r\n     <span style=\"color:blue;\">With<\/span> m_Form\r\n         .OnMouseUp = \"[Event Procedure]\"\r\n     End <span style=\"color:blue;\">With<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> colControls = <span style=\"color:blue;\">New<\/span> Collection\r\n     For Each ctl In m_Form.Controls\r\n         strControlsource = \"\"\r\n         On Error Resume <span style=\"color:blue;\">Next<\/span>\r\n         strControlsource = ctl.ControlSource\r\n         <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Len<\/span>(strControlsource) &gt; 0<span style=\"color:blue;\"> Then<\/span>\r\n             <span style=\"color:blue;\">Set<\/span> objDatasheetSelectionControl = <span style=\"color:blue;\">New<\/span> clsDatasheetSelectionControl\r\n             colControls.Add objDatasheetSelectionControl\r\n             <span style=\"color:blue;\">With<\/span> objDatasheetSelectionControl\r\n                 <span style=\"color:blue;\">Set<\/span> .Control = ctl\r\n                 <span style=\"color:blue;\">Set<\/span> .DatasheetSelectionForm = Me\r\n             End <span style=\"color:blue;\">With<\/span>\r\n         <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">Next<\/span> ctl\r\n<span style=\"color:blue;\">End Property<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 6: Die Property Set-Prozedur, die der Klasse einen Verweis auf das zu &uuml;berwachende Formular &uuml;bergibt und weitere Schritte durchf&uuml;hrt.<\/span><\/b><\/p>\n<p>Danach instanziert die Prozedur die Objektvariable <b>colControls <\/b>mit einem neuen <b>Collection<\/b>-Objekt. Sie durchl&auml;uft in einer <b>For Each<\/b>-Schleife alle Steuerelemente des Formulars &uuml;ber die <b>Controls<\/b>-Auflistung des mit <b>m_Form <\/b>referenzierten Formulars und speichert den Verweis auf das aktuelle Steuerelement jeweils in der Variablen <b>ctl<\/b>.<\/p>\n<p>Nun muss die Prozedur herausfinden, ob <b>ctl <\/b>ein gebundenes Steuerelement ist oder nicht, also beispielsweise ein Bezeichnungsfeld. Dies ermitteln wir mithilfe der Eigenschaft <b>ControlSource <\/b>des Steuerelements. Da diese aber auch nur bei Steuerelementen vorhanden ist, die man auch an ein Feld der Datenherkunft binden kann, l&ouml;st der Zugriff auf diese Eigenschaft etwa bei einem Bezeichnungsfeld einen Fehler aus. Also leeren wir zun&auml;chst eine <b>String<\/b>-Variable namens <b>strControlSource<\/b>, deaktivieren dann die Fehlerbehandlung und versuchen, den Wert der Eigenschaft <b>ControlSource <\/b>des aktuell mit <b>ctl <\/b>referenzierten Steuerelements zu ermitteln. Die Variable <b>strControlSource <\/b>wird dementsprechend nur gef&uuml;llt, wenn die Eigenschaft <b>Steuerelementinhalt <\/b>gef&uuml;llt, das Steuerelement also gebunden ist.<\/p>\n<p>Hat <b>strControlSource <\/b>nach diesem Prozedere einen Wert, handelt es sich um ein gebundenes Steuerelement und es soll eine Instanz der Klasse <b>clsDatasheetSelectionControl <\/b>f&uuml;r dieses Steuerelement angelegt werden. Die Prozedur erzeugt also eine neue Instanz der Klasse <b>clsDatasheetSelectionControl <\/b>und speichert einen Verweis darauf in der Variablen <b>objDatasheetSelectionControl<\/b>. Eine solche Instanz erwartet zwei Informationen:<\/p>\n<ul>\n<li>einen Verweis auf das Steuerelement, hier mit <b>ctl <\/b>&uuml;bergeben und<\/li>\n<li>einen Verweis auf die aufrufende Instanz der Klasse <b>clsDatasheetSelectionForm<\/b>, hier mit <b>Me <\/b>bezeichnet.<\/li>\n<\/ul>\n<p><b>MouseUp-Ereignis<\/b><\/p>\n<p>Nun soll die Klasse ein Ereignis ausl&ouml;sen, wenn ein Mausklick des Benutzers auf einen der Spalten- oder Zeilenk&ouml;pfe das Ereignis <b>Bei Maustaste ab <\/b>ausl&ouml;st. Dazu geh&ouml;ren zwei Elemente: erstens die Implementierung der Ereignisprozedur <b>MouseUp <\/b>des mit der Variablen <b>m_Form <\/b>referenzierten Formulars und zweitens das Ausl&ouml;sen eines in der Klasse definierten Ereignisses.<\/p>\n<p>Die Implementierung des <b>MouseUp<\/b>-Ereignisses finden Sie in Listing 7. Die Prozedur erledigt nur eine einzige Aufgabe: Sie l&ouml;st das Ereignis SelectionChanged dieser Klasse aus und &uuml;bergibt mit <b>SelLeft<\/b>, <b>SelWidth<\/b>, <b>SelTop <\/b>und <b>SelHeight <\/b>die aktuellen Markierungsdaten des Datenblatts so, dass diese einer Implementierung dieser Ereignisprozedur als Parameter &uuml;bergeben werden.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>m_Form_MouseUp(Button<span style=\"color:blue;\"> As Integer<\/span>, Shift<span style=\"color:blue;\"> As Integer<\/span>, _\r\n         X<span style=\"color:blue;\"> As Single<\/span>, Y<span style=\"color:blue;\"> As Single<\/span>)\r\n     <span style=\"color:blue;\">Call<\/span> MouseUp\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 7: Implementierung des Ereignisse Bei Maustaste ab des mit m_Form referenzierten Formulars in der Datenblattansicht<\/span><\/b><\/p>\n<p>Die Deklaration dieser Ereignisprozedur innerhalb einer Klasse, die von der Klasse selbst ausgel&ouml;st wird, sieht wie folgt aus:<\/p>\n<pre><span style=\"color:blue;\">Public <\/span>Event SelectionChanged(intSelLeft<span style=\"color:blue;\"> As Integer<\/span>, intSelWidth<span style=\"color:blue;\"> As Integer<\/span>, intSelTop<span style=\"color:blue;\"> As Integer<\/span>, intSelHeight<span style=\"color:blue;\"> As Integer<\/span>)<\/pre>\n<p>Fehlt noch ein Element, n&auml;mlich das Bindeglied zwischen den Instanzen der Klassen <b>clsDatasheetSelectionForm<\/b> und <b>clsDatasheetSelectionControl<\/b>. Dies ist die &ouml;ffentlich deklarierte Prozedur aus Listing 8. Die Prozedur wird von der Klasse <b>clsDatasheetSelectionControl <\/b>aus aufgerufen, wenn der Benutzer auf das darin referenzierte Steuerelement klickt und die Maustaste losl&auml;sst. Dies l&ouml;st das <b>MouseUp<\/b>-Ereignis des entsprechenden Steuerelements und die passende Ereignisprozedur aus, die lediglich die Prozedur <b>MouseUp <\/b>der Klasse <b>clsDatasheetSelectionForm <\/b>aufruft.<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>MouseUp()\r\n     <span style=\"color:blue;\">With<\/span> m_Form\r\n         RaiseEvent SelectionChanged(.SelLeft, .SelWidth, .SelTop, .SelHeight)\r\n     End <span style=\"color:blue;\">With<\/span>\r\n<span style=\"color:blue;\">End Property<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 8: Diese Prozedur kann von au&szlig;en aufgerufen werden, also beispielsweise von der Klasse clsDatasheetSelectionControl aus.<\/span><\/b><\/p>\n<p><b>Steuerelement-Klasse<\/b><\/p>\n<p>Die <b>Property Get<\/b>-Prozedur der Klasse <b>clsDatasheetSelectionForm<\/b>, die den Verweis auf das Formular entgegennimmt, legt f&uuml;r jedes gebundene Steuerelement im Formular eine Instanz der Klasse <b>clsDatasheetSelectionControl <\/b>an.<\/p>\n<p>Diese soll genau ein Ereignis des jeweiligen Steuerelements implementieren, und zwar &#8211; Sie ahnen es bereits &#8211; das Ereignis <b>Bei Maustaste auf<\/b>. Dazu ben&ouml;tigen wir wieder eine entsprechende Objektvariable f&uuml;r das Steuerelement, die mit dem Schl&uuml;sselwort <b>WithEvents <\/b>deklariert ist.<\/p>\n<p>Dummerweise wissen wir bei der &uuml;bergabe des Steuerelements noch nicht, um welchen Steuerelementtyp es sich handelt. Deshalb nimmt die Klasse das Steuerelement zun&auml;chst &uuml;ber eine <b>Property Get<\/b>-Methode mit einer Variablen des Typ <b>Control <\/b>auf &#8211; diesem k&ouml;nnen Sie beliebige eingebaute Access-Steuerelemente &uuml;bergeben (s. Listing 9). <\/p>\n<pre><span style=\"color:blue;\">Public Property <span style=\"color:blue;\">Set<\/span> <\/span>Control(ctl<span style=\"color:blue;\"> As <\/span>Control)\r\n     Select Case ctl.ControlType\r\n         <span style=\"color:blue;\">Case <\/span>acTextBox\r\n             <span style=\"color:blue;\">Set<\/span> m_Textbox = ctl\r\n             m_Textbox.OnMouseUp = \"[Event Procedure]\"\r\n         <span style=\"color:blue;\">Case <\/span>acComboBox\r\n             <span style=\"color:blue;\">Set<\/span> m_Combobox = ctl\r\n             m_Combobox.OnMouseUp = \"[Event Procedure]\"\r\n         <span style=\"color:blue;\">Case <\/span>acCheckBox\r\n             <span style=\"color:blue;\">Set<\/span> m_Checkbox = ctl\r\n             m_Checkbox.OnMouseUp = \"[Event Procedure]\"\r\n         <span style=\"color:blue;\">Case Else<\/span>\r\n             <span style=\"color:blue;\">Debug.Print<\/span> ctl.ControlType\r\n     <span style=\"color:blue;\">End Select<\/span>\r\n<span style=\"color:blue;\">End Property<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 9: Diese Property Get-Prozedur nimmt den Verweis auf das Steuerelement entgegen, das die Klasse clsDatasheetSelectionControl kapseln soll.<\/span><\/b><\/p>\n<p>Diese Prozedur pr&uuml;ft zun&auml;chst den Wert der Eigenschaft <b>ControlType<\/b>, also den Steuerelementtyp des &uuml;bergebenen Steuerelements. Je nachdem, ob es sich um ein Textfeld, ein Kombinationsfeld oder ein Kontrollk&auml;stchen handelt (dies sind die drei in der Datenblattansicht verwendeten Typen), &uuml;bergibt die Prozedur den Inhalt der Variablen <b>ctl <\/b>an eine dem Typ entsprechende Objektvariable. Da diese mit Ereignissen implementiert werden sollen, m&uuml;ssen diese modulweit mit dem Schl&uuml;sselwort <b>WithEvents <\/b>deklariert werden &#8211; und zwar so:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>WithEvents m_Textbox<span style=\"color:blue;\"> As <\/span>Textbox\r\n<span style=\"color:blue;\">Dim <\/span>WithEvents m_Combobox<span style=\"color:blue;\"> As <\/span>ComboBox\r\n<span style=\"color:blue;\">Dim <\/span>WithEvents m_Checkbox<span style=\"color:blue;\"> As <\/span>CheckBox<\/pre>\n<p>Nach der Zuweisung an die entsprechende Variable legt die Prozedur noch fest, dass die Klasse auf Aufrufe des Ereignisses <b>OnMouseUp <\/b>des Steuerelements lauschen soll. Fehlt noch die Implementierung der Ereignisprozeduren selbst. Die Grundger&uuml;ste der Prozeduren legen Sie wiederum &uuml;ber die beiden Kombinationsfelder im Kopf des Codefensters des Klassenmoduls <b>clsDatasheetSelectionControl <\/b>an. Alle drei Ereignisprozeduren sollen das Gleiche erledigen &#8211; n&auml;mlich eine weitere Prozedur namens <b>MouseUp <\/b>aufrufen (s. Listing 10). Diese Prozedur wiederum enth&auml;lt lediglich eine Anweisung &#8211; den Aufruf der gleichnamigen Methode der Instanz der Klasse <b>DatasheetSelectionForm<\/b>:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>m_Checkbox_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>, _\r\n         Y<span style=\"color:blue;\"> As Single<\/span>)\r\n     <span style=\"color:blue;\">Call<\/span> MouseUp\r\n<span style=\"color:blue;\">End Sub<\/span>\r\n<span style=\"color:blue;\">Private Sub <\/span>m_Combobox_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>, _\r\n         Y<span style=\"color:blue;\"> As Single<\/span>)\r\n     <span style=\"color:blue;\">Call<\/span> MouseUp\r\n<span style=\"color:blue;\">End Sub<\/span>\r\n<span style=\"color:blue;\">Private Sub <\/span>m_Textbox_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>, _\r\n         Y<span style=\"color:blue;\"> As Single<\/span>)\r\n     <span style=\"color:blue;\">Call<\/span> MouseUp\r\n<span style=\"color:blue;\">End Sub<\/span>End Property<\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 10: Je nachdem, welchen Typ das mit ctl &uuml;bergebene Steuerelement hat, wird die dem Steuerelementtyp entsprechende Ereignisprozedur ausgel&ouml;st.<\/span><\/b><\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>MouseUp()\r\n     m_DatasheetSelectionForm.MouseUp\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Nun m&uuml;ssen wir von der Klasse <b>clsDatasheetSelectionControl <\/b>allerdings noch irgendwie an die Methode MouseUp der Klasse <b>clsDatasheetSelectionForm <\/b>herankommen. Dazu deklarieren wir zun&auml;chst eine entsprechende Objektvariable, diesmal ohne <b>WithEvents<\/b>:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>m_DatasheetSelectionForm<span style=\"color:blue;\"> As <\/span>-clsDatasheetSelectionForm<\/pre>\n<p>Diese Variable f&uuml;llen wir &uuml;ber die <b>Property Set<\/b>-Prozedur <b>DatasheetSelectionForm<\/b>, die wie in Listing 11 deklariert ist.<\/p>\n<pre><span style=\"color:blue;\">Public Property <span style=\"color:blue;\">Set<\/span> <\/span>DatasheetSelectionForm(obj<span style=\"color:blue;\"> As <\/span>clsDatasheetSelectionForm)\r\n     <span style=\"color:blue;\">Set<\/span> m_DatasheetSelectionForm = obj\r\n<span style=\"color:blue;\">End Property<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 11: Diese Property Set-Prozedur nimmt in der Klasse clsDatasheetSelectionControl einen Verweis auf die aufrufende Klasse clsDatasheetSelectionForm entgegen.<\/span><\/b><\/p>\n<p><b>&uuml;bersicht<\/b><\/p>\n<p>Bild 7 zeigt eine &uuml;bersicht der Klassen und ihrer Ereignisse. Das Formular erstellt die Klasse <b>clsDatasheetSelectorForm <\/b>und &uuml;bergibt dieser einen Verweis auf sich selbst, die wiederum f&uuml;r jedes gebundene Steuerelement des Formulars eine Instanz der Klasse <b>clsDatasheetSelectionControl <\/b>erstellt und auch einen Verweis auf sich selbst &uuml;bergibt.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_05\/pic_901_007.png\" alt=\"&uuml;bersicht &uuml;ber die Instanzierung der Klassen und deren Ereignisweitergabe\" width=\"700\" height=\"645,842\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: &uuml;bersicht &uuml;ber die Instanzierung der Klassen und deren Ereignisweitergabe<\/span><\/b><\/p>\n<p>Das Anklicken eines der Spalten- oder Zeilenk&ouml;pfe im Formular l&ouml;st das <b>MouseUp<\/b>-Ereignis in <b>clsDatasheetSelectionForm <\/b>aus, ein Klick auf eine der Zellen des Datenblattes das gleichnamige Ereignis in der Klasse <b>clsDatasheetSelectionControl<\/b>. Das Ereignis in <b>clsDatasheetSelectionControl <\/b>wird an die Klasse <b>clsDatasheetSelectionForm <\/b>weitergeleitet, das seinerseit bei jedem <b>MouseUp<\/b>-Ereignis der beiden Klassen das Ereignis <b>SelectionChanged <\/b>ausl&ouml;st.<\/p>\n<p><b>Markierung einstellen<\/b><\/p>\n<p>&uuml;ber die vier Eigenschaften <b>SelLeft<\/b>, <b>SelWidth<\/b>, <b>SelTop <\/b>und <b>SelHeight <\/b>k&ouml;nnen Sie die aktuelle Markierung des Datenblattes nat&uuml;rlich auch per Code einstellen.<\/p>\n<p>Im Beispielformular <b>frmArtikel <\/b>statten wir dazu die vier entsprechenden Textfelder mit je einer Prozedur aus, die f&uuml;r das Ereignis <b>Nach Aktualisierung <\/b>ausgel&ouml;st wird.<\/p>\n<p>Diese Prozedur sieht f&uuml;r das Textfeld <b>txtSelHeight <\/b>etwa so aus, die &uuml;brigen werden analog programmiert:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>txtSelHeight_AfterUpdate()\r\n     <span style=\"color:blue;\">Call<\/span> SetDatasheetSelection\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Die dadurch aufgerufene Prozedur stellt eigentlich nur die Eigenschaften des Formulars mit den Werten der Textfelder ein. Allerdings gibt es dabei zwei Besonderheiten zu beachten:<\/p>\n<ul>\n<li>Die erste sichtbare Spalte hat den Index <b>2<\/b>. Der Wert des Feldes <b>txtSelLeft <\/b>muss also um eins erh&ouml;ht werden.<\/li>\n<li>In bestimmten F&auml;llen, zum Beispiel wenn vor dem Ausl&ouml;sen der Prozedur das komplette Formular oder eine komplette Zeile oder Spalte markiert war, arbeitet die Eigenschaft <b>SelLeft <\/b>korrekt &#8211; bei der Einstellung <b>1<\/b> wird also die erste Zelle markiert. Um dies zu beheben, stellen wir die Eigenschaft SelLeft nach dem Einstellen der &uuml;brigen Eigenschaften nochmals ein und alles funktioniert wie gewohnt wieder nicht richtig, also im Sinne unserer Definition korrekt.<\/li>\n<\/ul>\n<p>Die voillst&auml;ndige Prozedur finden Sie in Listing 12. Die gleiche Prozedur haben wir auch noch in der Klasse <b>clsDatasheetSelectionForm <\/b>eingebaut. Den Aufruf dieser Funktion finden Sie im Beispielformular <b>frmArtikel_Klasse<\/b>.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>SetDatasheetSelection()\r\n     <span style=\"color:blue;\">With<\/span> Me!sfmArtikel_Klasse.Form\r\n         .Sel<span style=\"color:blue;\">Left<\/span> = Nz(Me!txtSelLeft, 1) + 1\r\n         .SelWidth = Nz(Me!txtSelWidth, 0)\r\n         .SelTop = Nz(Me!txtSelTop, 1)\r\n         .SelHeight = Nz(Me!txtSelHeight, 0)\r\n         .Sel<span style=\"color:blue;\">Left<\/span> = Nz(Me!txtSelLeft, 1) + 1\r\n     End <span style=\"color:blue;\">With<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 12: Einstellen der Markierung eines Formulars in der Datenblattansicht per Code<\/span><\/b><\/p>\n<p><b>Zusammenfassung und Ausblick<\/b><\/p>\n<p>Mit den hier vorgestellten Techniken lesen Sie die Markierung im Datenblatt aus und stellen diese nach eigenen W&uuml;nschen wieder her. In weiteren Schritten k&ouml;nnte man die Prozeduren und Klassen noch so erweitern, dass auch andere Ereignisse als das Anklicken mit der Maus ausgewertet werden und in einer Ausgabe der ge&auml;nderten Markierung resultieren &#8211; zum Beispiel f&uuml;r das &auml;ndern der Markierung mit der Tastatur. In der Beispieldatenbank ist dies bereits f&uuml;r das Ereignis <b>KeyUp<\/b> implementiert.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>DatenblattImGriff.mdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/{090F669F-9E55-462B-BA42-BF8F80750075}\/aiu_901.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wenn Sie Formular in der Datenblattansicht anzeigen, bietet die Benutzeroberfl&auml;che von Access bereits alles N&ouml;tige, um damit zu arbeiten. Alles N&ouml;tige Nein: Es gibt noch eine Reihe Dinge, die Sie mit dem Datenblatt anstellen k&ouml;nnen &#8211; zum Beispiel das Auslesen oder Einstellen von Markierungen. Dieser Beitrag zeigt, wie Sie die aktuell markierten Zellen im Datenblatt ermitteln und diese nach Ihren W&uuml;nschen einstellen. Au&szlig;erdem packen wir die dazu notwendige Funktionalit&auml;t in eine wiederverwendbare Klasse.<\/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":[662013,66052013,44000023],"tags":[],"class_list":["post-55000901","post","type-post","status-publish","format-standard","hentry","category-662013","category-66052013","category-Mit_Formularen_arbeiten"],"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>Datenblattmarkierungen - 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\/Datenblattmarkierungen\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Datenblattmarkierungen\" \/>\n<meta property=\"og:description\" content=\"Wenn Sie Formular in der Datenblattansicht anzeigen, bietet die Benutzeroberfl&auml;che von Access bereits alles N&ouml;tige, um damit zu arbeiten. Alles N&ouml;tige Nein: Es gibt noch eine Reihe Dinge, die Sie mit dem Datenblatt anstellen k&ouml;nnen - zum Beispiel das Auslesen oder Einstellen von Markierungen. Dieser Beitrag zeigt, wie Sie die aktuell markierten Zellen im Datenblatt ermitteln und diese nach Ihren W&uuml;nschen einstellen. Au&szlig;erdem packen wir die dazu notwendige Funktionalit&auml;t in eine wiederverwendbare Klasse.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Datenblattmarkierungen\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-22T21:30:24+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg05.met.vgwort.de\/na\/b216ca2069484071b85200317c55b05c\" \/>\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=\"17\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Datenblattmarkierungen\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Datenblattmarkierungen\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Datenblattmarkierungen\",\"datePublished\":\"2020-05-22T21:30:24+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Datenblattmarkierungen\\\/\"},\"wordCount\":2907,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Datenblattmarkierungen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/b216ca2069484071b85200317c55b05c\",\"articleSection\":[\"2013\",\"5\\\/2013\",\"Mit Formularen arbeiten\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Datenblattmarkierungen\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Datenblattmarkierungen\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Datenblattmarkierungen\\\/\",\"name\":\"Datenblattmarkierungen - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Datenblattmarkierungen\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Datenblattmarkierungen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/b216ca2069484071b85200317c55b05c\",\"datePublished\":\"2020-05-22T21:30:24+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Datenblattmarkierungen\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Datenblattmarkierungen\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Datenblattmarkierungen\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/b216ca2069484071b85200317c55b05c\",\"contentUrl\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/b216ca2069484071b85200317c55b05c\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Datenblattmarkierungen\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Datenblattmarkierungen\"}]},{\"@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":"Datenblattmarkierungen - 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\/Datenblattmarkierungen\/","og_locale":"de_DE","og_type":"article","og_title":"Datenblattmarkierungen","og_description":"Wenn Sie Formular in der Datenblattansicht anzeigen, bietet die Benutzeroberfl&auml;che von Access bereits alles N&ouml;tige, um damit zu arbeiten. Alles N&ouml;tige Nein: Es gibt noch eine Reihe Dinge, die Sie mit dem Datenblatt anstellen k&ouml;nnen - zum Beispiel das Auslesen oder Einstellen von Markierungen. Dieser Beitrag zeigt, wie Sie die aktuell markierten Zellen im Datenblatt ermitteln und diese nach Ihren W&uuml;nschen einstellen. Au&szlig;erdem packen wir die dazu notwendige Funktionalit&auml;t in eine wiederverwendbare Klasse.","og_url":"https:\/\/access-im-unternehmen.de\/Datenblattmarkierungen\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-22T21:30:24+00:00","og_image":[{"url":"http:\/\/vg05.met.vgwort.de\/na\/b216ca2069484071b85200317c55b05c","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"17\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Datenblattmarkierungen\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Datenblattmarkierungen\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Datenblattmarkierungen","datePublished":"2020-05-22T21:30:24+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Datenblattmarkierungen\/"},"wordCount":2907,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Datenblattmarkierungen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg05.met.vgwort.de\/na\/b216ca2069484071b85200317c55b05c","articleSection":["2013","5\/2013","Mit Formularen arbeiten"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Datenblattmarkierungen\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Datenblattmarkierungen\/","url":"https:\/\/access-im-unternehmen.de\/Datenblattmarkierungen\/","name":"Datenblattmarkierungen - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Datenblattmarkierungen\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Datenblattmarkierungen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg05.met.vgwort.de\/na\/b216ca2069484071b85200317c55b05c","datePublished":"2020-05-22T21:30:24+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Datenblattmarkierungen\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Datenblattmarkierungen\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Datenblattmarkierungen\/#primaryimage","url":"http:\/\/vg05.met.vgwort.de\/na\/b216ca2069484071b85200317c55b05c","contentUrl":"http:\/\/vg05.met.vgwort.de\/na\/b216ca2069484071b85200317c55b05c"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Datenblattmarkierungen\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Datenblattmarkierungen"}]},{"@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\/55000901","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=55000901"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000901\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000901"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000901"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000901"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}