Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

Excel 2016 VBA Grundkurs

Beliebigen Tag markieren

Testen Sie unsere 2016 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Mit einer For-Each-Schleife prüft der Code, ob der gesuchte Tag in der jeweiligen Zelle enthalten ist und markiert diesen farbig.

Transkript

Ich möchte jetzt in diesem Kalender bestimmte Tage markieren können. Sagen wir Tag der Arbeit oder Weihnachten oder sonst was. Und zwar mit einer möglichst neutralen Funktion. Das bedeutet ein ALT + F11 - ich mache mir jetzt mal ein bisschen Platz - und erfinde eine Funktion genauer gesagt eine Prozedur, "Sub MarkiereTag". Und die kriegt übergeben "datDieses as Date" genau das Datum, was ich markieren möchte. Und damit ich es testen kann, werde ich jetzt direkt ein paar Prozeduren vorbereiten, zum Beispiel "Sub MarkiereTagDerArbeit". Und die würde "MarkiereTag" aufrufen und dort jetzt den Tag der Arbeit vorgeben. Das ist also mit Doppelkreuz, damit es als Datum erkennbar ist, der 01.05., - Achtung: In amerikanischer Reihenfolge - und würde so benutzt werden. Das funktioniert zwar inhaltlich noch nicht, aber syntaktisch ist es schon in Ordnung. Sie können also mit DebuggenKompilieren prüfen Der würde das aufrufen, Datum übergeben und dann nichts tun. Diese Prozedur sollte man besser nicht von außen aufrufen können, weil die davon lebt, das hier bestimmte Sachen vorbereitet sind. Also sollte man sie auch gleich als "Private" kennzeichnen. Diese hier könnte beispielsweise später von einer Schaltfläche direkt aufgerufen werden. Nun ist nicht jedes Datum so sprechend wie dieses. Es gibt einige, die sind schwerer zu erkennen. Deswegen werde ich da oben ein paar Konstanten vorbereiten. Das bedeutet hier Modulöffentliche, die mit const m_cdat" sagen, ich bin eine modulöffentliche Konstante vom Datumstyp und die heißt dann "TagDerArbeit". Und dann können wir den hier schon mal wieder rauskopieren. Und die ist dann genau dieser Tag. Da kann ich gleich noch ein paar mehr vorbereiten, die habe ich schon in die Zwischenablage übernommen, damit ich nicht so viel tippen muss. Und hier wieder das Kommentarzeichen runter, dass man auch die Unterstriche sieht. Und wenn Sie genau hingucken werden Sie feststellen: Einige davon haben eine Jahreskennzeichnung. Eigentlich haben sie Recht. Dieser Tag der Arbeit ist gezielt derjenige aus dem Jahr 2017. Aber zumindest das Datum selber wechselt nicht. jedes Jahr. Bei den Ostern-gebundenen Feiertagen ist das anders. Also, sowohl Karfreitag als auch Ostermontag sind in jedem Jahr komplett anders. Das werde ich hier entsprechend in den Konstanten berücksichtigen. Je nachdem, wie ich die Datumswerte verarbeite. wird es nämlich unerheblich sein, ob hier eine Jahreszahl drin steht. Hier wird also jetzt konkret der Tag der Arbeit genannt, und dann kann ich die anderen auch schon mal entsprechend ergänzen. Also "Sub MarkiereHeiligabend". Das ist "MarkiereTag" für "Heiligabend". Was haben wir noch? "Sub MarkiereKarfreitag" Und auch hier wieder "MarkiereTag" und dann die passende Konstante. Welche haben wir? Karfreitag, dort. Und schließlich noch den Ostermontag. Wenn Sie das wirklich kalenderabhängig machen wollen, dann sollten Sie irgendwo eine Tabelle führen, wo das steht. Es gibt ja Websites, wo man die dann herunterladen kann. Das ist mir jetzt zu aufwendig, Es geht ja drum zu zeigen, wie Sie mit Ranges umgehen, und das ist hier ein sehr geeignetes Beispiel. Also, "MarkiereTag" für die Konstante "Ostermontag". Damit haben wir sozusagen alle fünf. Aber die eigentliche Arbeit findet hier statt. Da drin werde ich mir jetzt jeden tag angucken und mit dem Datum vergleichen. Ich brauche also ein "RangeTag as Range" und kann dann schreiben "For Each RangeTag" in der Auflistung. Aber in welcher eigentlich? Ich werde nicht die, sowas wie ActiveSheet-Auflistung Cells nehmen. Dann habe ich nämlich mehrere Milliarden Zellen. Sondern ich will genau nur die Datumswerte untersuchen. Naja, und dafür haben wir ja einen Bereich. Der steckt da drunter schon in der Function. Also, "BereichNurDatum", der ist ein Range-Datentyp, und deswegen kann ich von dem sagen, hätte ich gerne alle "Cells". So einfach, wenn Sie sich die passende Function vorbereiten. Und jetzt könnte ich in "RangeTag" vergleichen, ob das meinem gesuchten Datum hier entspricht. Vorher sollte ich aber erstmal prüfen, ob es überhaupt ein Datum ist. Also, dafür gibt es fertige Funktionen, die alle mit "Is" beginnen. Die ich mit der STRG + Leertaste, Intellisense-Liste anzeigen kann. Die Sie schon kennen, "If IsMissing". Vielleicht haben Sie auch schon mal "IsNumeric" gesehen. Ist das überhaupt eine Zahl. Und was wir jetzt brauchen "IsDate". "IsNull" brauchen Sie eigentlich nur, wenn Sie mit Datenbanken arbeiten, die auch schon mal Null-Werte zurückgeben. Und "IsDate" ist wie alle anderen, eine Function, die einen "True" oder "False" zurückgibt. Wenn es also ein Datum ist, dann ist sie "True". Und deswegen kann ich direkt hier "RangeTag.Value" übergeben und muss es nicht mal mehr mit gleich irgendwas vergleichen. Es ist "True" oder "False" und kann sofort mit dem "Then" abschließen. Wenn es ein Datum ist, dann prüfe ich, ob es das Richtige ist. "If" dieses Datum " RangeTag.Value" ist gleich meinem "datDieses", dann habe ich einen Treffer. Allerdings gehe ich hier auf Nummer sicher, vielleicht ist nämlich an dieser Stelle ein String. Da steht dann "1.Mai", Leerzeichen, "2017" und das ist nicht identisch mit einem Datum. Deswegen nutze ich noch so eine Konvertierungsfunktion, "CDate", "convert to date". die also aus diesem String - der ja datumsfähig ist sozusagen, das prüft das "IsDate" - die aus diesem String dann auch einen Datumsdatentyp macht. Und nur dann kann ich auch mit einem Date vergleichen. Sonst würden möglicherweise, die beiden nicht in Date, sondern in String umgewandelt. und dann hätte ich den String "1.Mai 2017" gegen das Datum "01.05.2017". Und das wäre nicht identisch. Also Sicherheitsmaßname, wenn da kein Zahlendatum drin steht. Und jetzt habe ich endlich die richtige Zelle gefunden. Also "RangeTag." und jetzt kann ich die bunt machen. aber nicht mit "ub", sondern mit "Interior", der Füllbereich, und der hat eine "Color". Diese "Color" mache ich "Green", Also Sie hören es schon, wenn Sie einfach den deutschen Pfadnamen nehmen, ein "vb" davorstellen, und das Englische schreiben, dann finden Sie relativ zuverlässig alle Farben. Dann probieren wir das doch mal. Erstens gespeichert, zweitens DebuggenKompilieren, alles in Ordnung. Vorher noch gucken, dass dort nichts bunt ist. Ich werde den ersten Mai markieren. Und wo haben wir ihn hier, Tag der Arbeit. Einmal F5 und dann gucken wir drüben nach. Alles grün, alles in Butter. Bevor Sie jetzt denken, Sie sind fertig, gucken Sie sich bitte nochmal Weihnachten an. Hier der Heilig Abend, 24.12. ganz deutlich, Ich mach's F5. Keine Fehlermeldung, aber auch keinen Treffer. Und da kommt eine kleine Überraschung. Doch, es ist alles gut. Sie sehen es nur nicht. Diese Zelle ist grün. Aber zusätzlich hat sie eine bedingte Formatierung, die auch die Hintergrundfarbe ändert, und deswegen kommt die nicht durch. Bedingt Formatierung ist nachträglich. Nachdem Sie die Zelle bunt gemacht haben. kommt darauf die bedingte Formatierung. Ich muss also etwas ändern, was die bedingte Formatierung nicht hat. Mit ALT + F11 gehe ich nochmal in den Code. Sie können zum Beispiel irgend so eine Schraffur drauf machen, ein Muster oder auf English Pattern. Also "rngTag" auch "Interior" und dann "Pattern". Und auch dort klappt nichts aus, aber Sie können dort mit "xlPattern" mal gucken, wann es kommt, mit "xlPattern" alle Konstanten erwischen. Die hier so anfangen, oder Sie müssten es mal aufzeichnen. Also ich nehme jetzt "xlPattern" ab. Und das wirkt natürlich nicht nachträglich, also jetzt hat sich noch nichts geändert. Sondern wenn ich jetzt mit F5 das nochmal ausführe, dann sehen Sie jetzt zwar nicht das Grün, aber wenigstens das Muster. Und auch den Tag der Arbeit muss ich jetzt extra nochmal ausführen. - einmal F5 - damit Sie sehen, dass das da auch zuschlägt. Und dann können wir einfach, der Vollständigkeit halber F5, Karfreitag, F5, Ostermontag, auch noch ergänzen, also alle vier Tage. Die sind zufällig, - Nein, nicht ganz zufällig, Karfreitag liegt immer außerhalb des Wochenendes - die liegen also direkt sichtbar, und Weihnachten ist sozusagen Pech, weil es im Jahr 2017 auf einen Sonntag fällt. Oder Samstag wäre auch schiefgegangen. Aber damit haben wir eine sehr neutrale Prozedur, die in der Lage ist, ein bestimmtes Datum zu erkennen und das dann zu markieren.

Excel 2016 VBA Grundkurs

Lassen Sie sich systematisch in die Excel-Programmierung mit Visual Basic for Applications (VBA) einführen.

7 Std. 25 min (66 Videos)
Derzeit sind keine Feedbacks vorhanden...
 
Hersteller:
Exklusiv für Abo-Kunden
Ihr(e) Trainer:
Erscheinungsdatum:30.08.2016
Laufzeit:7 Std. 25 min (66 Videos)

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!