{"id":55000840,"date":"2012-06-01T00:00:00","date_gmt":"2020-05-22T21:55:02","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=840"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Aktivitaeten_zaehlen","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Aktivitaeten_zaehlen\/","title":{"rendered":"Aktivit&auml;ten z&auml;hlen"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg05.met.vgwort.de\/na\/0f9b5f70be164206b2861482a46e8a3c\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>F&uuml;hren Sie Strichlisten Zum Beispiel &uuml;ber Anrufe bei Kunden, St&ouml;rungen durch Arbeitskollegen, verzehrten Kaffee oder andere Dinge, die Sie w&auml;hrend der Arbeit aufzeichnen m&ouml;chten Damit ist es nun vorbei: Wir bieten Ihnen den ultimativen Aktivit&auml;tenz&auml;hler. Damit definieren Sie beliebig viele Aktivit&auml;ten in verschiedenen Kategorien und erh&ouml;hen die Anzahl mit einem einfachen Mausklick. Die Aktivit&auml;ten werden nat&uuml;rlich zur sp&auml;teren Auswertung inklusive Datum gespeichert.<\/b><\/p>\n<p>Das Formular aus Bild 1 ist das wesentliche Element der Benutzeroberfl&auml;che des Aktivit&auml;tenz&auml;hlers. Dieses Formular erlaubt das Wechseln des aktuellen Tages und zeigt jeweils die Anzahl der verschiedenen Aktivit&auml;ten f&uuml;r das aktuelle Datum an.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2012_03\/AktivitaetenZaehlen-web-images\/pic002.png\" alt=\"pic002.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1: Aktivit&auml;ten z&auml;hlen per Mausklick<\/span><\/b><\/p>\n<p>Mit den beiden Schaltfl&auml;chen rechts neben dem Textfeld zur Eingabe des Datums schalten Sie jeweils einen Tag vor oder zur&uuml;ck. Das Datumstextfeld selbst ist mit der Klasse <b>clsDatebox <\/b>ausgestattet.<\/p>\n<p>Das bedeutet, dass Sie die Eingabemarke auf einem Datumsteil platzieren k&ouml;nnen (entweder Tag, Monat oder Jahr) und den Wert mit den Tasten <b>Nach oben <\/b>und <b>Nach unten <\/b>einstellen k&ouml;nnen.<\/p>\n<p>Unten zeigt das Formular die vorhandenen Aktivit&auml;tsbezeichnungen an, das Textfeld neben der jeweiligen Aktivit&auml;t markiert die Anzahl f&uuml;r den aktuellen Tag. Die beiden Schaltfl&auml;chen rechts neben der Anzahl dienen zum Erh&ouml;hen oder Vermindern des angezeigten Wertes. Negative Werte k&ouml;nnen auf diese Weise nicht eingetragen werden.<\/p>\n<p>Fehlt noch die Schaltfl&auml;che mit der Beschriftung <b>Aktivit&auml;ten bearbeiten<\/b>. Diese &ouml;ffnet den Dialog aus Bild 2, der eine &Uuml;bersicht der vorhandenen Aktivit&auml;tsbezeichnungen anzeigt. Markieren Sie einen Eintrag und klicken auf die Schaltfl&auml;che <b>Aktivit&auml;tsbezeichnung l&ouml;schen<\/b>, wird diese entfernt.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2012_03\/AktivitaetenZaehlen-web-images\/pic003.png\" alt=\"pic003.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2: Verwalten der Aktivit&auml;tsbezeichnungen<\/span><\/b><\/p>\n<p>Ein Doppelklick auf einen Listenfeldeintrag &ouml;ffnet die Detailansicht mit dem gew&uuml;nschten Datensatz und die Schaltfl&auml;che <b>Neue Aktivit&auml;tsbezeichnung <\/b>zeigt den gleichen Dialog zur Eingabe einer neuen Aktivit&auml;tsbezeichnung an.<\/p>\n<p>Dieser Dialog sieht wie in Bild 4.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2012_03\/AktivitaetenZaehlen-web-images\/pic004.png\" alt=\"pic004.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 3: Anlegen neuer Aktivit&auml;tsbezeichnungen<\/span><\/b><\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2012_03\/AktivitaetenZaehlen-web-images\/pic005.png\" alt=\"pic005.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 4: Verwalten und Anlegen neuer Kategorien<\/span><\/b><\/p>\n<p><b>Datenmodell des Aktivit&auml;tsz&auml;hlers<\/b><\/p>\n<p>Das Datenmodell der Datenbank ist &uuml;berschaubar. Es enth&auml;lt drei Tabellen und sieht wie in Bild 5 aus. Die Tabelle <b>tblAktivitaetskategorien<\/b> enth&auml;lt lediglich das Prim&auml;rschl&uuml;sselfeld <b>AktivitaetskategorieID <\/b>und das Feld zur Eingabe der Bezeichnung der Kategorie.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2012_03\/AktivitaetenZaehlen-web-images\/pic001.png\" alt=\"pic001.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 5: Datenmodell der Aktivit&auml;ten-Datenbank<\/span><\/b><\/p>\n<p>Die Tabelle <b>tblAktivitaetsbezeichnungen <\/b>enth&auml;lt die Namen der verschiedenen Aktivit&auml;ten. Au&szlig;erdem verweist sie mit dem Fremdschl&uuml;sselfeld <b>AktivitaetskategorieID <\/b>auf die Tabelle <b>tblAktivitaetskategorien<\/b>, damit jeder Bezeichnung eine Kategorie zugewiesen werden kann.<\/p>\n<p>Fehlt noch die Tabelle <b>tblAktivitaeten<\/b>. Diese enth&auml;lt zun&auml;chst das Fremdschl&uuml;sselfeld <b>AktivitaetsbezeichnungID<\/b>, mit dem Sie die jeweilige Aktivit&auml;t festlegen.<\/p>\n<p>Das Feld <b>Aktivitaetsdatum <\/b>enth&auml;lt das Datum, an dem die im Feld <b>Aktivitaetsanzahl <\/b>gespeicherte Anzahl der entsprechenden Aktivit&auml;t aufgezeichnet wurde.<\/p>\n<p>Damit wird deutlich, dass Sie f&uuml;r die beiden Felder <b>AktivitaetsbezeichnungID <\/b>und <b>Aktivitaetsdatum <\/b>einen eindeutigen, zusammengesetzten Schl&uuml;ssel definieren m&uuml;ssen: F&uuml;r jede Aktivit&auml;t soll nur eine Anzahl pro Tag aufgezeichnet werden.<\/p>\n<p><b>Aktivit&auml;ten pflegen<\/b><\/p>\n<p>Schauen wir uns zun&auml;chst die Formulare zur Verwaltung der Aktivit&auml;tsbezeichnungen und Aktivit&auml;tskategorien an. Das Formular <b>frmAktivitaetsbezeichnungen <\/b>ist in Bild 6 abgebildet und enth&auml;lt ein Listenfeld namens <b>lst<\/b>. Das Listenfeld soll die Namen der Aktivit&auml;tsbezeichnung und der Kategorie anzeigen.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2012_03\/AktivitaetenZaehlen-web-images\/pic007.png\" alt=\"pic007.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 6: Das Formular zum Verwalten der Aktivit&auml;tsbezeichnungen in der Entwurfsansicht<\/span><\/b><\/p>\n<p>Deshalb enth&auml;lt die als Datensatzherkunft verwendete Abfrage die beiden Tabellen <b>tblAktivitaetsbezeichnungen <\/b>und <b>tblAktivitaetskategorien<\/b> (s. Bild 7). Zus&auml;tzlich liefert die Datensatzherkunft den Wert des Feldes <b>AktivitaetsbezeichnungID<\/b>. Damit dieses nicht angezeigt wird, sind die Eigenschaften <b>Spaltenanzahl <\/b>und <b>Spaltenbreiten <\/b>auf die Werte <b>3 <\/b>und <b>0cm;6cm <\/b>eingestellt (die dritte Spalte wird auf der verbleibenden Breite angezeigt).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2012_03\/AktivitaetenZaehlen-web-images\/pic006.png\" alt=\"pic006.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 7: Datenherkunft des Listenfeldes zur Anzeige der Aktivit&auml;tsbezeichnungen<\/span><\/b><\/p>\n<p>Ein Doppelklick auf einen Eintrag im Listenfeld l&ouml;st die Prozedur aus <span class=\"verweis-ohneumbruch\"><a href=\"#anker-64-anchor\">Listing 1<\/a><\/span> aus. Diese pr&uuml;ft zun&auml;chst, ob der Doppelklick &uuml;berhaupt einen Eintrag getroffen hat.<\/p>\n<p class=\"listingueberschrift\">Listing 1: &Ouml;ffnen des Formulars zum Bearbeiten von Aktivit&auml;tsdetails<\/p>\n<pre>Private Sub lst_DblClick(Cancel As Integer)\r\n    If Not IsNull(Me!lst) Then\r\n        DoCmd.OpenForm &quot;frmAktivitaetsbezeichnungdetails&quot;, WindowMode:=acDialog, _\r\n            WhereCondition:=&quot;AktivitaetsbezeichnungID = &quot; &amp; Me!lst, DataMode:=acFormEdit\r\n        Me!lst.Requery\r\n    End If\r\nEnd Sub<\/pre>\n<p>Falls ja, &ouml;ffnet die <b>DoCmd.OpenForm<\/b>-Methode das Formular <b>frmAktivitaetsbezeichnungDetails <\/b>zum Bearbeiten eines bestehenden Datensatzes. Dieser wird mit dem Parameter <b>WhereCondition <\/b>auf den im Listenfeld angeklickten Eintrag festgelegt.<\/p>\n<p>Wenn Sie einen neuen Eintrag anlegen m&ouml;chten, klicken Sie auf die Schaltfl&auml;che <b>cmdNeu<\/b>.<\/p>\n<p>Dies l&ouml;st die folgende Prozedur aus, die das gleiche Formular &ouml;ffnet &#8211; nur diesmal mit dem Wert <b>acFormAdd <\/b>f&uuml;r den Parameter <b>DataMode<\/b>. Anschlie&szlig;end wird das Listenfeld aktualisiert:<\/p>\n<pre>Private Sub cmdNeu_Click()\r\n    DoCmd.OpenForm &quot;frmAktivitaetsbezeichnungDetails&quot;, WindowMode:=acDialog, DataMode:=acFormAdd\r\n    Me!lst.Requery\r\nEnd Sub<\/pre>\n<p>Ein Klick auf die Schaltfl&auml;che <b>cmdLoeschen <\/b>hingegen l&ouml;st die Prozedur aus <span class=\"verweis-ohneumbruch\"><a href=\"#anker-49-anchor\">Listing 2<\/a><\/span> aus. Diese Prozedur pr&uuml;ft ebenfalls, ob der Benutzer &uuml;berhaupt auf einen Eintrag geklickt hat und nicht etwa in den leeren Bereich des Listenfeldes.<\/p>\n<p class=\"listingueberschrift\">Listing 2: L&ouml;schen einer Aktivit&auml;tsbezeichnung<\/p>\n<pre>Private Sub cmdLoeschen_Click()\r\n    Dim db As DAO.Database\r\n    If Not IsNull(Me!lst) Then\r\n        If MsgBox(&quot;Soll die Aktivit&auml;tsbezeichnung ''&quot; &amp; Me!lst.Column(1) &amp; &quot;'' wirklich gel&ouml;scht werden&quot;, _\r\n                vbYesNo + vbExclamation, &quot;Aktivit&auml;tsbezeichnung l&ouml;schen&quot;) = vbYes Then\r\n            Set db = CurrentDb\r\n            db.Execute &quot;DELETE FROM tblAktivitaetsbezeichnungen WHERE AktivitaetsbezeichnungID = &quot; &amp; Me!lst\r\n            Me!lst.Requery\r\n            Set db = Nothing\r\n        End If\r\n    End If\r\nEnd Sub<\/pre>\n<p>Falls ja, erscheint ein Meldungsfenster mit der Frage, ob der Benutzer den Datensatz wirklich l&ouml;schen m&ouml;chte. Falls ja, verwendet die Prozedur die <b>Execute<\/b>-Methode des aktuellen <b>Database<\/b>-Objekts, um eine entsprechende <b>DELETE<\/b>-Abfrage auszuf&uuml;hren. Anschlie&szlig;end wird das Listenfeld aktualisiert.<\/p>\n<p><b>Aktivit&auml;tsbezeichnungen im Detail<\/b><\/p>\n<p>Das Formular <b>frmAktivitaetsbezeichnungenDetail <\/b>zeigt eine einzelne Aktivit&auml;tsbezeichnung an und erlaubt das Einstellen der Bezeichnung sowie der Kategorie, unter der diese Bezeichnung gef&uuml;hrt wird (s. Bild 8).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2012_03\/AktivitaetenZaehlen-web-images\/pic008.png\" alt=\"pic008.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 8: Das Formular mit der Detailansicht einer Aktivit&auml;tsbezeichnung in der Entwurfsansicht<\/span><\/b><\/p>\n<p>Ein spezielles Feature dieses Formulars ist die M&ouml;glichkeit, neue Kategorien direkt in das Kombinationsfeld einzutragen. Dies wird durch die Prozedur aus <span class=\"verweis-ohneumbruch\"><a href=\"#anker-62-anchor\">Listing 3<\/a><\/span> realisiert, die durch das Ereignis <b>Bei Nicht in Liste <\/b>ausgel&ouml;st wird.<\/p>\n<p class=\"listingueberschrift\">Listing 3: Anlegen einer neuen Aktivit&auml;tsbezeichnung<\/p>\n<pre>Private Sub cboAktivitaetkategorieID_NotInList(NewData As String, Response As Integer)\r\n    Response = acDataErrAdded\r\n    Dim db As DAO.Database\r\n    Set db = CurrentDb\r\n    db.Execute &quot;INSERT INTO tblAktivitaetskategorien(Aktivitaetskategorie) VALUES (''&quot; &amp; NewData &amp; &quot;'')&quot;, _\r\n        dbFailOnError\r\n    Set db = Nothing\r\nEnd Sub<\/pre>\n<p><!--30percent--><\/p>\n<p>Die Prozedur speichert den mit dem Parameter <b>NewData <\/b>&uuml;bergebenen Wert in der Tabelle <b>tblAktivitaetskategorien <\/b>und gibt f&uuml;r den Parameter <b>Response <\/b>den Wert <b>acDataErrAdded <\/b>zur&uuml;ck, was die sonst erscheinende Meldung vermeidet.<\/p>\n<p>Ein Klick auf die Schaltfl&auml;che <b>cmdDetails<\/b> rechts vom Kombinationsfeld zur Auswahl der Kategorie l&ouml;st die Prozedur aus <span class=\"verweis-ohneumbruch\"><a href=\"#anker-63-anchor\">Listing 4<\/a><\/span> aus. Diese &ouml;ffnet das Formular <b>frmAktivitaetskategorien<\/b>. Dieses funktioniert prinzipiell genau so wie das Formular <b>frmAktivitaetsbezeichnungen<\/b>.<\/p>\n<p class=\"listingueberschrift\">Listing 4: &Ouml;ffnen der &Uuml;bersicht der Kategorien<\/p>\n<pre>Private Sub cmdDetails_Click()\r\n    DoCmd.OpenForm &quot;frmAktivitaetskategorien&quot;, WindowMode:=acDialog, _\r\n        OpenArgs:=Me!cboAktivitaetkategorieID\r\n    If IstFormularGeoeffnet(&quot;frmAktivitaetskategorien&quot;) Then\r\n        Me!cboAktivitaetkategorieID = Forms!frmAktivitaetskategorien!lst\r\n        DoCmd.Close acForm, &quot;frmAktivitaetskategorien&quot;\r\n    End If\r\nEnd Sub<\/pre>\n<p>Interessant ist jedoch folgendes Feature: Beim &Ouml;ffnen des Formulars zum Bearbeiten eines vorhandenen Datensatzes wird dieser direkt im Listenfeld markiert. Dazu wird erstens der aktuell im Kombinationsfeld <b>cboAktivitaetskategorie <\/b>ausgew&auml;hlte Eintrag mit dem Parameter <b>OpenArgs<\/b> an das aufgerufene Formular &uuml;bergeben.<\/p>\n<p>Dann pr&uuml;ft die Prozedur, die beim Laden des so ge&ouml;ffneten Formulars ausgel&ouml;st wird, den Wert des &Ouml;ffnungsarguments. Sie pr&uuml;ft, ob das &Ouml;ffnungsargument gef&uuml;llt ist, und stellt das Listenfeld auf den damit &uuml;bergebenen Wert ein:<\/p>\n<pre>Private Sub Form_Load()\r\n    If Not IsNull(Me.OpenArgs) Then\r\n        Me!lst = Me.OpenArgs\r\n    End If\r\nEnd Sub<\/pre>\n<p>Nach dem Schlie&szlig;en des Formulars <b>frmAktivitaetskategorien <\/b>pr&uuml;ft die aufrufende Prozedur <b>cmdDetails_Click<\/b>, ob das Formular noch ge&ouml;ffnet ist. Falls ja, liest sie den den Wert der im Listenfeld ausgew&auml;hlten Kategorie ein und legt diese f&uuml;r das Kombinationsfeld <b>cboAktivitaetskategorie <\/b>fest.<\/p>\n<p>Beim Schlie&szlig;en des Detailformulars <b>frmAktivitaetsbezeichnungDetails <\/b>ist Vorsicht angesagt. Wenn Sie ein Formular mit der <b>DoCmd.Close<\/b>-Methode schlie&szlig;en, das gebundene Felder mit Restriktionen enth&auml;lt, k&ouml;nnen Probleme auftreten.<\/p>\n<p>Wenn der aktuelle Datensatz die Restriktionen n&auml;mlich nicht erf&uuml;llt, wird das Formular einfach geschlossen, ohne den Datensatz zu speichern &#8211; und ohne dass der Benutzer &uuml;berhaupt davon erf&auml;hrt, dass der Datensatz nicht gespeichert wurde! Also f&uuml;gen wir in der Prozedur, die beim Klicken auf die Schaltfl&auml;che <b>cmdOK <\/b>ausgel&ouml;st wird, vorsichtshalber eine kleine Validierung durch (s. <span class=\"verweis-ohneumbruch\"><a href=\"#anker-69-anchor\">Listing 5<\/a><\/span>).<\/p>\n<p class=\"listingueberschrift\">Listing 5: Schlie&szlig;en des Formulars frmAktivitaetskategorien<\/p>\n<pre>Private Sub cmdOK_Click()\r\n    If Me.Dirty Then\r\n        If IsNull(Me!txtAktivitaetsbezeichnung) Then\r\n            MsgBox &quot;Geben Sie eine Bezeichnung ein.&quot;\r\n            Me!txtAktivitaetsbezeichnung.SetFocus\r\n            Exit Sub\r\n        End If\r\n        If IsNull(Me!cboAktivitaetkategorieID) Then\r\n            MsgBox &quot;W&auml;hlen Sie eine Kategorie aus.&quot;\r\n            Me!cboAktivitaetkategorieID.SetFocus\r\n            Exit Sub\r\n        End If\r\n    End If\r\n    DoCmd.Close acForm, Me.Name\r\nEnd Sub<\/pre>\n<p>Diese pr&uuml;ft zun&auml;chst, ob die Daten des aktuellen Datensatzes &uuml;berhaupt ge&auml;ndert wurden. Falls ja, untersucht die Prozedur die Werte der beiden Felder auf G&uuml;ltigkeit. Nur wenn beide in Ordnung sind, wird das Formular geschlossen, sonst erscheint eine entsprechende Meldung.<\/p>\n<p><b>Das Formular zum Z&auml;hlen der Aktivit&auml;ten<\/b><\/p>\n<p>Auch wenn das Formular zum Z&auml;hlen der Aktivit&auml;ten so harmlos aussieht, so ist doch die Darstellung nicht gerade trivial. Das Formular selbst ist recht einfach aufgebaut, wie die Entwurfsansicht aus Bild 9 zeigt.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2012_03\/AktivitaetenZaehlen-web-images\/pic011.png\" alt=\"pic011.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 11: Die erste Teilabfrage liefert bereits gespeicherte Aktivit&auml;ten.<\/span><\/b><\/p>\n<p>Das Problem bei der Anzeige ist, dass es immer alle in der Tabelle <b>tblAktivitaetsbezeichnungen <\/b>enthaltenen Eintr&auml;ge anzeigen soll &#8211; auch wenn noch gar keine Aktivit&auml;ten f&uuml;r den aktuellen Tag vorliegen (s. Bild 10).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2012_03\/AktivitaetenZaehlen-web-images\/pic009.png\" alt=\"pic009.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 9: Entwurfsansicht des Hauptformulars der Anwendung<\/span><\/b><\/p>\n<p>Man k&ouml;nnte es sich nun nat&uuml;rlich einfach machen und einfach im Voraus f&uuml;r jede Aktivit&auml;t und jeden Tag einen Eintrag in der Tabelle <b>tblAktivitaeten <\/b>anlegen. Dies w&uuml;rde allerdings regelm&auml;&szlig;ig &auml;nderungen am Datenbestand nach sich ziehen &#8211; beispielsweise, wenn der Benutzer eine Aktivit&auml;tsbezeichnung hinzuf&uuml;gt oder entfernt. Also w&auml;hlen wir die dynamische Variante, bei der wir die Datenherkunft f&uuml;r das Formular &uuml;ber eine Abfrage erstellen.<\/p>\n<p>Diese realisieren wir &uuml;ber zwei aufeinander aufbauende Abfragen. Die erste Abfrage namens <b>qryAktivitaetenNachDatum <\/b>sieht wie in Bild 11 aus und ermittelt zun&auml;chst alle Datens&auml;tze der Tabelle <b>tblAktivitaeten <\/b>f&uuml;r den heutigen Tag. Damit das Datum dynamisch angepasst werden kann, f&uuml;gen Sie einen Parameter namens <b>prmAktivitaetDatum <\/b>hinzu.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2012_03\/AktivitaetenZaehlen-web-images\/pic010.png\" alt=\"pic010.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 10: Das Formular zeigt alle Aktivit&auml;tsbezeichnungen an, auch wenn es noch keine Aktivit&auml;ten gibt.<\/span><\/b><\/p>\n<p>Die zweite Abfrage f&uuml;hrt die Ergebnisse der ersten Abfrage mit den Daten der beiden Tabellen <b>tblAktivitaetsbezeichnungen <\/b>und <b>tblAktivitaetskategorien <\/b>zusammen (s. Bild 12). Diese beiden Tabellen werden grunds&auml;tzlich ben&ouml;tigt, damit Kategorie und Aktivit&auml;tsbezeichnung in der Liste angezeigt werden k&ouml;nnen.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2012_03\/AktivitaetenZaehlen-web-images\/pic012.png\" alt=\"pic012.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 12: Die zweite Teilabfrage f&uuml;hrt die Ergebnisse der ersten Abfrage mit allen Aktivit&auml;tsbezeichnungen zusammen.<\/span><\/b><\/p>\n<p>Die Abfrage <b>qryAktivitaetenNachDatum <\/b>wird &uuml;ber eine <b>Outer Join<\/b>-Beziehung mit der Tabelle <b>tblAktivitaeten <\/b>verkn&uuml;pft. Dies sorgt daf&uuml;r, dass die Abfrage alle Aktivit&auml;tsbezeichnungen samt Kategorie liefert, aber nur die vorliegenden Datens&auml;tze der Tabelle <b>tblAktivitaeten<\/b>.<\/p>\n<p>Das Ergebnis sieht wie in Bild 13 aus. Dort, wo keine Datens&auml;tze in der Tabelle <b>tblAktivitaeten<\/b> vorliegen, tr&auml;gt Access einfach eine <b>0 <\/b>in das Feld <b>AktivitaetAnzahl <\/b>ein.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2012_03\/AktivitaetenZaehlen-web-images\/pic013.png\" alt=\"pic013.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 13: Im Ergebnis f&auml;llt es nicht auf, dass die Tabelle tblAktivitaeten f&uuml;r einige Aktivit&auml;tsbezeichnungen gar keine Daten liefert. Diese werden schlicht durch den Wert 0 ersetzt.<\/span><\/b><\/p>\n<p>Sicher fragen Sie sich nun, warum man nicht einfach mit einer einzigen Abfrage arbeiten kann und den Parameter direkt in der zweiten Abfrage unterbringt. Der Grund ist, dass die Abfrage dann erst die Aktivit&auml;tsbezeichnungen und die Aktivit&auml;ten zusammenf&uuml;hrt und erst dann nach dem Datum filtert, wodurch bei Tagen, an denen nicht alle Aktivit&auml;ten ausgef&uuml;hrt wurden, nicht alle Aktivit&auml;ten zur&uuml;ckgeliefert werden (siehe <b>qryAktivitaeten_Fehlversuch<\/b>).<\/p>\n<p><b>Datenherkunft einstellen<\/b><\/p>\n<p>Die Abfrage <b>qryAktivitaeten <\/b>k&ouml;nnten Sie theoretisch direkt als Datenherkunft des Formulars eintragen. Allerdings st&ouml;rt der Parameter <b>prmAktivitaetDatum<\/b>, der zuvor noch gef&uuml;llt werden muss.<\/p>\n<p>Sie k&ouml;nnten statt dieses Parameters direkt auf das Feld mit dem Datum verweisen (<b>Forms!frmAktivitaeten!txtDatum<\/b>), aber wir setzen den Parameter per VBA, um die Abfrage gegebenenfalls unabh&auml;ngig vom Formular testen und einsetzen zu k&ouml;nnen. Dies geschieht mit der folgenden Prozedur, die zu verschiedenen Gelegenheiten aufgerufen wird:<\/p>\n<pre>Private Sub DatenherkunftSetzen()\r\n    Dim db As DAO.Database\r\n    Dim rst As DAO.Recordset\r\n    Dim qdf As DAO.QueryDef\r\n    Set db = CurrentDb\r\n    Set qdf = db.QueryDefs(&quot;qryAktivitaeten&quot;)\r\n    qdf.Parameters(&quot;prmAktivitaetdatum&quot;) = m_Datum\r\n    Set rst = qdf.OpenRecordset\r\n    Set Me.Recordset = rst\r\n    Set db = Nothing\r\nEnd Sub<\/pre>\n<p>Die Prozedur erstellt ein <b>QueryDef<\/b>-Objekt auf Basis der Abfrage <b>qryAktivitaeten<\/b>, setzt einen Wert f&uuml;r den Parameter <b>prmAktivitaetDatum <\/b>ein, &ouml;ffnet ein Recordset auf Basis der Abfrage und weist es der Eigenschaft <b>Recordset <\/b>des Formulars zu.<\/p>\n<p>Was aber ist <b>m_Datum<\/b> Sollte hier nicht der Bezug auf das Textfeld stehen, welches das aktuelle Datum liefert Ja, das ist der Fall. Allerdings soll das Formular einigerma&szlig;en flexibel einsetzbar sein, sodass Sie es beispielsweise als Teil weiterer L&ouml;sungen einsetzen k&ouml;nnen. Ein Beispiel ist der Einsatz als Unterformular im Hauptformular der L&ouml;sung aus dem Beitrag <b>Tagesablauf verwalten mit dem aiuTimeplanner <\/b>(<b>www.access-im-unternehmen.de\/830<\/b>). Dieses Formular besitzt bereits ein Textformular zur Eingabe des Datums, das Sie ganz einfach f&uuml;r das hier vorgestellte Formular mitnutzen k&ouml;nnen, indem Sie es entsprechend referenzieren. Daher verwenden wir im Code eine Objektvariable, die Sie mit einem Verweis auf ein beliebiges Textfeld f&uuml;llen k&ouml;nnen:<\/p>\n<pre>Dim WithEvents m_Datum As TextBox<\/pre>\n<p>In der Beispieldatenbank verwenden wir ein Textfeld, das zus&auml;tzlich mit den Funktionen der Klasse <b>clsDatebox <\/b>best&uuml;ckt wurde. Diese Klasse wird im Beitrag <b>Datumsfelder mit Klasse <\/b>(<b>www.access-im-unternehmen.de\/831<\/b>) vorgestellt. Um die Funktionen greifbar zu machen, deklarieren Sie zun&auml;chst eine entsprechende Objektvariable mit dem Schl&uuml;sselwort <b>WithEvents<\/b>:<\/p>\n<pre>Dim WithEvents objDatebox As clsDatebox<\/pre>\n<p>Den Rest der Arbeit &uuml;bernimmt die Prozedur, die durch das Ereignis <b>Beim Laden <\/b>des Formulars <b>frmAktivitaeten<\/b> ausgel&ouml;st wird. Dieses stellt zun&auml;chst das Textfeld <b>txtDatum <\/b>auf das aktuelle Datum ein und weist dieses Textfeld der Objektvariablen <b>m_Datum <\/b>zu. Wenn Sie das Datum nun von einem anderen Textfeld beziehen m&ouml;chten, brauchen Sie nur die Zuweisung zu &auml;ndern und m&uuml;ssen den Namen des Textfelds nicht im kompletten Code &auml;ndern.<\/p>\n<p>Danach wird ein neues Objekt auf Basis der Klasse <b>clsDatebox <\/b>erstellt und seine Eigenschaft <b>Datebox <\/b>mit einem Verweis auf das mit <b>m_Datum <\/b>referenzierte Textfeld gef&uuml;llt. Zu guter Letzt ruft die Prozedur die Routine <b>DatenherkunftSetzen <\/b>auf, damit die Aktivit&auml;ten f&uuml;r den aktuell im Textfeld angegebenen Tag angezeigt werden:<\/p>\n<pre>Private Sub Form_Load()\r\n    Me!txtDatum = Date\r\n    Set m_Datum = Me!txtDatum\r\n    Set objDatebox = New clsDatebox\r\n    Set objDatebox.Datebox = m_Datum\r\n    DatenherkunftSetzen\r\nEnd Sub<\/pre>\n<p><b>Anderes Datum einstellen<\/b><\/p>\n<p>Die Klasse <b>clsDatebox <\/b>liefert die M&ouml;glichkeit, das Datum durch Platzieren der Einf&uuml;gemarke auf Tag, Monat oder Jahr des Textfeldes und Bet&auml;tigen der Tasten <b>Nach oben <\/b>und <b>Nach unten <\/b>einzustellen. <\/p>\n<p>F&uuml;r &auml;nderungen um jeweils einen Tag haben wir au&szlig;erdem zwei Schaltfl&auml;chen hinzugef&uuml;gt, die jeweils zum vorherigen beziehungsweise zum folgenden Tag wechseln.<\/p>\n<p>Die beiden Schaltfl&auml;chen l&ouml;sen beim Klicken die folgenden beiden Prozeduren aus, die das Datum anpassen und anschlie&szlig;end die Routine <b>DatenherkunftSetzen<\/b> ausl&ouml;sen:<\/p>\n<pre>Private Sub cmdTagVor_Click()\r\n    m_Datum.Value = m_Datum.Value + 1\r\n    DatenherkunftSetzen\r\nEnd Sub\r\nPrivate Sub cmdTagZurueck_Click()\r\n    m_Datum.Value = m_Datum.Value - 1\r\n    DatenherkunftSetzen\r\nEnd Sub<\/pre>\n<p>Auch das manuelle &auml;ndern des Datums muss ber&uuml;cksichtigt werden. Dies erledigt die folgende Prozedur, die auf das Ereignis <b>Nach Aktualisierung <\/b>des Textfeldes reagiert:<\/p>\n<pre>Private Sub m_Datum_AfterUpdate()\r\n    DatenherkunftSetzen\r\nEnd Sub<\/pre>\n<p>Und schlie&szlig;lich liefert die Klasse <b>clsDatebox <\/b>ein Ereignis, das bei jeder &auml;nderung des Datums ausgel&ouml;st wird.<\/p>\n<p>Da die Routine <b>DatenherkunftSetzen <\/b>den Fokus jeweils auf die erste angezeigte Aktivit&auml;t verschiebt, haben wir um den Aufruf herum ein paar Anweisungen platziert, die sich die aktuelle Position der Eingabemarke im Textfeld merken und diese nach dem Aufrufen von <b>DatenherkunftSetzen <\/b>wieder zur&uuml;cksetzen:<\/p>\n<pre>Private Sub objDatebox_DateChange()\r\n    Dim intSelStart As Integer\r\n    Dim intSelLength As Integer\r\n    intSelStart = m_Datum.SelStart\r\n    intSelLength = m_Datum.SelLength\r\n    DatenherkunftSetzen\r\n    m_Datum.SetFocus\r\n    m_Datum.SelStart = intSelStart\r\n    m_Datum.SelLength = intSelLength\r\nEnd Sub<\/pre>\n<p><b>Aktivit&auml;ten z&auml;hlen<\/b><\/p>\n<p>Kommen wir zu den beiden Schaltfl&auml;chen, die f&uuml;r jede Aktivit&auml;t abgebildet werden und die jeweils die Anzahl um eins nach oben oder unten ver&auml;ndern sollen.<\/p>\n<p>Wenn der Benutzer die Anzahl f&uuml;r eine Aktivit&auml;t um eins erh&ouml;hen m&ouml;chte, klickt er auf die Schaltfl&auml;che <b>cmdPlus <\/b>und l&ouml;st damit die Ereignisprozedur aus <span class=\"verweis-ohneumbruch\"><a href=\"#anker-74-anchor\">Listing 6<\/a><\/span> aus.<\/p>\n<p class=\"listingueberschrift\">Listing 6: Erh&ouml;hen der Anzahl einer Aktivit&auml;t<\/p>\n<pre>Private Sub cmdPlus_Click()\r\n    Dim db As DAO.Database\r\n    Dim strSQL As String\r\n    Set db = CurrentDb\r\n    strSQL = &quot;UPDATE tblAktivitaeten SET AktivitaetAnzahl = AktivitaetAnzahl + 1 &quot; _\r\n        &amp; &quot;WHERE AktivitaetsbezeichnungID = &quot; &amp; Me!AktivitaetsbezeichnungID _\r\n        &amp; &quot; AND Aktivitaetdatum = &quot; &amp; ISODatum(m_Datum)\r\n    db.Execute strSQL, dbFailOnError\r\n    If db.RecordsAffected = 0 Then\r\n        strSQL = &quot;INSERT INTO tblAktivitaeten(AktivitaetsbezeichnungID, AktivitaetDatum, &quot; _\r\n            &amp; &quot;AktivitaetAnzahl) VALUES(&quot; &amp; Me!AktivitaetsbezeichnungID &amp; &quot;, &quot; _\r\n            &amp; ISODatum(m_Datum) &amp; &quot;, 1)&quot;\r\n        db.Execute strSQL, dbFailOnError\r\n    End If\r\n    Set db = Nothing\r\n    DatenherkunftSetzen\r\nEnd Sub<\/pre>\n<p>Beim Erh&ouml;hen der Anzahl einer Aktivit&auml;t gibt es zwei M&ouml;glichkeiten: Entweder es gibt bereits einen Datensatz f&uuml;r die Aktivit&auml;t in der Tabelle <b>tblAktivitaeten<\/b>, die das Zieldatum aufweist, oder nicht.<\/p>\n<p>Die Prozedur geht zun&auml;chst vom ersten Fall aus und versucht, mit einer <b>UPDATE<\/b>-Abfrage die Anzahl der Aktivit&auml;ten f&uuml;r die angegebene Aktivit&auml;tsbezeichnung und das gew&auml;hlte Datum um eins zu erh&ouml;hen.<\/p>\n<p>Ob dies gelungen ist oder nicht, ergibt die anschlie&szlig;ende Abfrage der Eigenschaft <b>RecordsAffected <\/b>des <b>Database<\/b>-Objekts. Diese liefert die Anzahl der von der zuletzt ausgef&uuml;hrten Aktionsabfrage betroffenen Datens&auml;tze zur&uuml;ck. Ist dieser gr&ouml;&szlig;er <b>0<\/b>, war die Abfrage erfolgreich und der Wert des Feldes <b>AktivitaetAnzahl <\/b>wurde um eins erh&ouml;ht.<\/p>\n<p>Liefert die Eigenschaft jedoch den Wert <b>0<\/b>, wurde kein Datensatz ver&auml;ndert, was darauf zur&uuml;ckzuf&uuml;hren ist, dass noch kein entsprechender Datensatz in der Tabelle <b>tblAktivitaeten <\/b>vorliegt.<\/p>\n<p>Auch das ist kein Problem: Dann legt die folgende <b>INSERT INTO<\/b>-Aktionsabfrage einen neuen Datensatz mit den entsprechenden Werten f&uuml;r die Felder <b>AktivitaetsbezeichnungID<\/b>, <b>AktivitaetDatum <\/b>und <b>AktivitaetAnzahl <\/b>in der Tabelle <b>tblAktivitaeten <\/b>an.<\/p>\n<p>Anschlie&szlig;end sorgt ein Aufruf der Prozedur <b>DatenherkunftSetzen <\/b>noch f&uuml;r die Aktualisierung der Anzeige.<\/p>\n<p><b>Vermindern der Anzahl einer Aktivit&auml;t<\/b><\/p>\n<p>Gelegentlich erh&ouml;ht man vielleicht die Anzahl f&uuml;r die falsche Aktivit&auml;t. Um dies zu korrigieren, gibt es die Schaltfl&auml;che <b>cmdMinus<\/b>. Diese l&ouml;st die Prozedur aus <span class=\"verweis-ohneumbruch\"><a href=\"#anker-75-anchor\">Listing 7<\/a><\/span> aus.<\/p>\n<p class=\"listingueberschrift\">Listing 7: Vermindern der Anzahl einer Aktivit&auml;t<\/p>\n<pre>Private Sub cmdMinus_Click()\r\n    Dim db As DAO.Database\r\n    If Me!AktivitaetAnzahl &gt; 0 Then\r\n        Set db = CurrentDb\r\n        db.Execute &quot;UPDATE tblAktivitaeten SET AktivitaetAnzahl = AktivitaetAnzahl -1 &quot; _\r\n            &amp; &quot;WHERE AktivitaetsbezeichnungID = &quot; &amp; Nz(Me!AktivitaetsbezeichnungID, 0) _\r\n            &amp; &quot; AND Aktivitaetdatum = &quot; &amp; ISODatum(m_Datum), dbFailOnError\r\n        Set db = Nothing\r\n        Me.Requery\r\n    End If\r\nEnd Sub<\/pre>\n<p>Die Prozedur f&uuml;hrt schlicht eine UPDATE-Aktionsabfrage aus, die den Wert des Feldes <b>AktivitaetAnzahl <\/b>um eins vermindert. Diese Abfrage wird jedoch nur ausgef&uuml;hrt, wenn die Anzahl f&uuml;r das Feld <b>AktivitaetAnzahl <\/b>der jeweiligen Aktivit&auml;t &uuml;berhaupt gr&ouml;&szlig;er als <b>0<\/b> ist.<\/p>\n<p class=\"zwischen-berschrift-oberer-spaltenrand\">Aktivit&auml;tsbezeichnungen hinzuf&uuml;gen<\/p>\n<p>Fehlt noch die Schaltfl&auml;che <b>cmdAktivitaetenBearbeiten<\/b>, die das Formular <b>frmAktivitaetsbezeichnungen <\/b>&ouml;ffnet. Diese l&ouml;st die folgende Prozedur aus:<\/p>\n<pre>Private Sub cmdAktivitaetenBearbeiten_Click()\r\n    DoCmd.OpenForm &quot;frmAktivitaetsbezeichnungen&quot;, WindowMode:=acDialog\r\n    DatenherkunftSetzen\r\nEnd Sub<\/pre>\n<p><b>Zusammenfassung und Ausblick<\/b><\/p>\n<p>Die hier vorgestellte L&ouml;sung scheint auf den ersten Blick trivial zu sein, entpuppt sich jedoch als interessante Aufgabe. Au&szlig;erdem ist der Aktivit&auml;tenz&auml;hler wirklich praktisch! Damit k&ouml;nnen Sie alles z&auml;hlen, von Telefonaten &uuml;ber beantwortete Supportanfragen bis hin zu Dingen, die Sie privat interessieren. Dabei spielt es keine Rolle, ob Sie wissen wollen, wie viel Kaffee Sie tats&auml;chlich den Tag &uuml;ber trinken, wie oft Sie die Arbeit zum Surfen oder zum Abrufen von E-Mails unterbrechen oder wie oft Sie den Arbeitsplatz verlassen, um sich eine Zigarette zu g&ouml;nnen.<\/p>\n<p>In einem weiteren Beitrag namens <b>PivotCharts per VBA steuern <\/b>(<b>www.access-im-unternehmen.de\/842<\/b>) schauen wir uns noch an, wie sich die hier gewonnenen Daten auswerten lassen.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>AktivitaetenZaehlen.mdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/{D600FE3B-1E2F-4809-B43D-223AEAE8D5B8}\/aiu_840.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>F&uuml;hren Sie Strichlisten Zum Beispiel &uuml;ber Anrufe bei Kunden, St&ouml;rungen durch Arbeitskollegen, verzehrten Kaffee oder andere Dinge, die Sie w&auml;hrend der Arbeit aufzeichnen m&ouml;chten Damit ist es nun vorbei: Wir bieten Ihnen den ultimativen Aktivit&auml;tenz&auml;hler. Damit definieren Sie beliebig viele Aktivit&auml;ten in verschiedenen Kategorien und erh&ouml;hen die Anzahl mit einem einfachen Mausklick. Die Aktivit&auml;ten werden nat&uuml;rlich zur sp&auml;teren Auswertung inklusive Datum gespeichert.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662012,66032012,44000027],"tags":[],"class_list":["post-55000840","post","type-post","status-publish","format-standard","hentry","category-662012","category-66032012","category-Loesungen"],"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>Aktivit&auml;ten z&auml;hlen - 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\/Aktivitaeten_zaehlen\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Aktivit&auml;ten z&auml;hlen\" \/>\n<meta property=\"og:description\" content=\"F&uuml;hren Sie Strichlisten Zum Beispiel &uuml;ber Anrufe bei Kunden, St&ouml;rungen durch Arbeitskollegen, verzehrten Kaffee oder andere Dinge, die Sie w&auml;hrend der Arbeit aufzeichnen m&ouml;chten Damit ist es nun vorbei: Wir bieten Ihnen den ultimativen Aktivit&auml;tenz&auml;hler. Damit definieren Sie beliebig viele Aktivit&auml;ten in verschiedenen Kategorien und erh&ouml;hen die Anzahl mit einem einfachen Mausklick. Die Aktivit&auml;ten werden nat&uuml;rlich zur sp&auml;teren Auswertung inklusive Datum gespeichert.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Aktivitaeten_zaehlen\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-22T21:55:02+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg05.met.vgwort.de\/na\/0f9b5f70be164206b2861482a46e8a3c\" \/>\n<meta name=\"author\" content=\"Andr\u00e9 Minhorst\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andr\u00e9 Minhorst\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"18\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Aktivitaeten_zaehlen\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Aktivitaeten_zaehlen\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Aktivit&auml;ten z&auml;hlen\",\"datePublished\":\"2020-05-22T21:55:02+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Aktivitaeten_zaehlen\\\/\"},\"wordCount\":3058,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Aktivitaeten_zaehlen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/0f9b5f70be164206b2861482a46e8a3c\",\"articleSection\":[\"2012\",\"3\\\/2012\",\"L\u00f6sungen\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Aktivitaeten_zaehlen\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Aktivitaeten_zaehlen\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Aktivitaeten_zaehlen\\\/\",\"name\":\"Aktivit&auml;ten z&auml;hlen - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Aktivitaeten_zaehlen\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Aktivitaeten_zaehlen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/0f9b5f70be164206b2861482a46e8a3c\",\"datePublished\":\"2020-05-22T21:55:02+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Aktivitaeten_zaehlen\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Aktivitaeten_zaehlen\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Aktivitaeten_zaehlen\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/0f9b5f70be164206b2861482a46e8a3c\",\"contentUrl\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/0f9b5f70be164206b2861482a46e8a3c\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Aktivitaeten_zaehlen\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Aktivit&auml;ten z&auml;hlen\"}]},{\"@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":"Aktivit&auml;ten z&auml;hlen - 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\/Aktivitaeten_zaehlen\/","og_locale":"de_DE","og_type":"article","og_title":"Aktivit&auml;ten z&auml;hlen","og_description":"F&uuml;hren Sie Strichlisten Zum Beispiel &uuml;ber Anrufe bei Kunden, St&ouml;rungen durch Arbeitskollegen, verzehrten Kaffee oder andere Dinge, die Sie w&auml;hrend der Arbeit aufzeichnen m&ouml;chten Damit ist es nun vorbei: Wir bieten Ihnen den ultimativen Aktivit&auml;tenz&auml;hler. Damit definieren Sie beliebig viele Aktivit&auml;ten in verschiedenen Kategorien und erh&ouml;hen die Anzahl mit einem einfachen Mausklick. Die Aktivit&auml;ten werden nat&uuml;rlich zur sp&auml;teren Auswertung inklusive Datum gespeichert.","og_url":"https:\/\/access-im-unternehmen.de\/Aktivitaeten_zaehlen\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-22T21:55:02+00:00","og_image":[{"url":"http:\/\/vg05.met.vgwort.de\/na\/0f9b5f70be164206b2861482a46e8a3c","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"18\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Aktivitaeten_zaehlen\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Aktivitaeten_zaehlen\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Aktivit&auml;ten z&auml;hlen","datePublished":"2020-05-22T21:55:02+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Aktivitaeten_zaehlen\/"},"wordCount":3058,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Aktivitaeten_zaehlen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg05.met.vgwort.de\/na\/0f9b5f70be164206b2861482a46e8a3c","articleSection":["2012","3\/2012","L\u00f6sungen"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Aktivitaeten_zaehlen\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Aktivitaeten_zaehlen\/","url":"https:\/\/access-im-unternehmen.de\/Aktivitaeten_zaehlen\/","name":"Aktivit&auml;ten z&auml;hlen - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Aktivitaeten_zaehlen\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Aktivitaeten_zaehlen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg05.met.vgwort.de\/na\/0f9b5f70be164206b2861482a46e8a3c","datePublished":"2020-05-22T21:55:02+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Aktivitaeten_zaehlen\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Aktivitaeten_zaehlen\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Aktivitaeten_zaehlen\/#primaryimage","url":"http:\/\/vg05.met.vgwort.de\/na\/0f9b5f70be164206b2861482a46e8a3c","contentUrl":"http:\/\/vg05.met.vgwort.de\/na\/0f9b5f70be164206b2861482a46e8a3c"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Aktivitaeten_zaehlen\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Aktivit&auml;ten z&auml;hlen"}]},{"@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\/55000840","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=55000840"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000840\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000840"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000840"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000840"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}