
Der Ersatz für den Microsoft Date and Time Picker
Beim Erstellen von VBA* Anwendungen muss man dem Nutzer häufig die Möglichkeit geben das aktuelle Datum oder auch ein bestimmtes Bearbeitungs- oder Zieldatum auswählen zu können.
Um die Auswahl komfortabel gestalten zu können, nutzte ich bis 2018 in allen Formularen den „Microsoft Date and Timer Picker“, welchen man durch die Auswahl von „Extras“ –> „Zusätzliche Steuerelemente“ den Steuerelementen der VBA* Toolbox hinzufügen konnte.
Diese tolle Erweiterung öffnet beim Klicken auf die Dropdown Box einen „Mini Kalender“, mit welchem man durch Monate und Jahre navigieren könnte. Beim Klicken auf einen bestimmten Tag wurde dann das ausgewählte Datum in die Dropdown Box übernommen, wo es vom VBA*-Code ausgewertet werden könnte.
Leider machte dieses nützliche Tool nach der Umstellung auf Windows10 und Office 2016 (jeweils 64-bit) im Jahr 2018 plötzlich Probleme. Beim Öffnen der mit dem „Microsoft Date and Timer Picker“ ausgestatteten Excel-Dateien kam es zur Fehlermeldung, dass die Datei „MSCOMCT2.OCX“ nicht gefunden werden konnte und der „Microsoft Date and Timer Picker“ konnte daraufhin nicht mehr genutzt werden.
Die Datei sollte laut Pfadangabe eigentlich im Office Installationsverzeichnis, oder unter „C:\Windows\SysWOW64“ zu finden sein, was nicht mehr der Fall war. Ich schrieb damals zwar mittels VBS einen Patch welcher diese Datei nachinstallierte und auch am System registrierte, doch leider war zum Ausführen des Patches eine Anmeldung als Administrator nötig, was an vielen Rechnern aus Sicherheitsgründen natürlich nicht der Fall war.
Ich musste daher eine andere Möglichkeit finden, wie die Funktionalität des „Microsoft Date and Timer Pickers“ ohne die Verwendung der „MSCOMCT2.OCX“ weiterhin genutzt werden kann. Um zukünftig nicht immer von irgendwelchen Plug-Ins abhängig zu sein, erstellte ich den „Basti Kalender“, welcher lediglich die VBA* Grundelemente nutzt.
Einfaches Einbinden in bestehende VBA-Projekte
Beim Erstellen des Kalenders achtete ich von Anfang an darauf, dass es möglich ist den Kalender ohne großen Aufwand in mehreren VBA*-Projekten nachrüsten zu können. Ich erstellte ich ein Formular namens „Kalender“, welches die Oberfläche des Kalenders enthält und ein Modul namens „Kalendermodul“, in welchem sich die Programm-Logik hinter dem Kalender befindet.
Um nun den Kalender in ein bestehendes VBA Projekt einbinden zu können, importiert man einfach die beiden Dateien „Kalender.frm“ und „Kalendermodul.bas“. Dazu führt man einen Rechtsklick auf den VBA*-Projektexplorer aus und wählt im Menü den Menüpunkt „Datei importieren“ aus, um im anschließenden im Dialogfenster die gewünschte Datei zu importieren.
(Hinweis: Der Import muss für jede Datei einzeln erfolgen!)

Flexible Verwendung der importierten Kalenderfunktionen
Soll der Kalender auf eine Textbox eines Formulars angewendet werden, so fügt man als erstes einen Button und falls noch nicht geschehen eine Textbox, in welche später das Datum eingetragen werden soll, in das gewünschte Formular ein.

Ist das erledigt, muss der Kalender beim Klicken auf den Button noch gefüllt und aufgerufen werden. Dazu trägt man im Klick-Event des angelegten Buttons einfach den folgenden Aufruf der Methode „OpenKalenderForm(FormName, FormTextBox)“ ein.
Private Sub CommandButton1_Click()
'Kalender öffnen (aktuelles Formular und gewünschte Textbox übergeben)
Call OpenKalenderForm(Aufruf_mit, "TextBox1")
End Sub
Die Methode OpenKalenderForm(…) erwartet beim Aufruf die folgenden beiden Parameter, welche für die korrekte Zuordnung des Kalenders zum jeweiligen Formular und der darauf angelegten TextBox nötig sind.
- FormName – Der Name des aktuellen Formulars als Element vom Typ Object, weshalb hier keine Anführungszeichen benötigt werden! Im Beispiel: Aufruf_mit!
- FormTextBox – Der Name der Textbox welche später das Datum anzeigen soll als Element vom Typ string. Die TextBox trägt im gezeigten Beispiel den Name TextBox1!
Ab Version 1.0.2.2 vom 11.05.2022 kann dem OpenKalenderForm(…) ein optionaler dritter Parameter übergeben werden, mit welchen die Überschrift des Kalenderfensters geändert werden kann. Der Vorteil des optionalen Parameters ist, dass bereits erstellte Aufrufe anhand des vorherigen Schemas mit den zwei Übergabeparametern weiterhin ihre Funktionalität behalten und nicht angepasst werden müssen. Der Aufruf der neuen Methode zum Öffnen des Kalenderfensters sieht dann wie folgt aus:
Private Sub CommandButton1_Click()
'Ab Version 1.0.2.2 mögliche Angabe der Fensterbezeichnung
'Kalender öffnen (aktuelles Formular und gewünschte Textbox übergeben)
Call OpenKalenderForm(Aufruf_mit, "TextBox1", "Text für Textbox 1")
End Sub
- FensterBezeichnung (optional): (ab Version 1.0.2.2) – Die optionale Angabe der Bezeichnung (Überschrift) des Kalenderfensters!
Diese Vorgehensweise des Kalenderaufrufs hat den Vorteil, dass auch mehrere Kalender-Buttons mit unterschiedlichen TextBox-Zielen im gleichen Formular eingefügt werden können. Der Aufruf des Kalenders unterscheidet sich dabei lediglich am an zweiter Stelle übergebenen FormTextBox-Parameter der OpenKalenderForm-Methode, wie das nachfolgende Beispiel zeigt.
Private Sub CommandButton1_Click()
'Kalender öffnen (aktuelles Formular und gewünschte Textbox übergeben)
Call OpenKalenderForm(Aufruf_mit, "TextBox1")
End Sub
Private Sub CommandButton2_Click()
'Kalender öffnen (aktuelles Formular und gewünschte Textbox übergeben)
Call OpenKalenderForm(Aufruf_mit, "TextBox2")
End Sub
Diese recht einfache Möglichkeit der Kalenderintegration hat mir, nach der Fertigstellung, die Überarbeitung der Listen einfach gemacht! Den neu eingefügten TextBoxen für das Datum habe ich den gleichen Namen wie dem an gleicher Stelle zuvor gelöschten DateTimePicker vergeben. Das hat den großen Vorteil, dass an Makros, welche vorher das Datum des DateTimePickers weiterverabeitet haben, keine Änderungen vorgenommen werden müssen. Die Bezeichnung des für das Öffnen des Kalenderformular zusätzlich hinzugefügten Buttons spielt beim Umbau keine Rolle, da es sich um ein vorher noch nicht vorhandenes Element handelt, was lediglich das Anzeigen des Kalenders steuert. Hier hat man jetzt sogar die Möglichkeit, durch das Deaktivieren des Buttons die Nutzung des Kalenders zu sperren.
Aufruf mit Zellenbezug anstatt Textboxeintrag
(ab Version 1.0.1.0)
Nach Maroris Anfrage aus dem Kommentarbereich, ob es eventuell möglich wäre den Kalender dahingehend zu erweitern, dass dieser direkt über ein Makro gestartet werden kann und anschließend der gewählte Datumswert nicht in eine Formular-Textbox, sondern in eine Tabellenzelle eingetragen wird, erweiterte ich den Kalender um diese Funktion.
Damit bereits angelegte Kalenderaufrufe jedoch ihre Gültigkeit behalten und nicht nachträglich überarbeitet werden müssen, entschied ich mich dazu für den Aufruf durch das Einführen eines weiteren Befehls zu integrieren.

Dieser neue Aufruf mit der Bezeihnung OpenKalenderSheet(…) erwartet, ebenso wie der oben genannte Aufruf für die Methode OpenKalenderForm(…), die Übergabe von zwei Parametern.
Call OpenKalenderSheet(SheetName, SheetCell)
- SheetName – Der Name des Ziel-Tabellenblattes in welchem sich die Zelle für das Datum befindet. Der Übergabewert muss vom Typ String, also zum Beispiel „Tabelle1“, übergeben werden!
- SheetCell – Die Zielzelle innerhalb des Tabellenblattes ebenfalls als String. Die Spaltenangabe erfolgt hier in der in Excel verwendeten Buchstabennotation, also zum Beispiel als „A8“ oder „C17“!
Fügt man seinem Tabellenblatt einen Button hinzu und führt über das Klick-Event des Buttons den Befehl aus, so öffnet sich der Kalender und selektiert das im übergebenen Tabellenblatt / Zelle eingetragene Datum. Ist noch kein Datum in der Zelle vorhanden, so wird der heutige Tag selektiert. Klickt man nun auf einen beliebigen Tag im Kalender, so wird das Datum in der angegebenen Zelle aktualisiert und der Kalender automatisch geschlossen.
Übersicht der Erweiterungen des Funktionsumfangs (letzte Änderung 11.05.2022)
Version 1.0.2.2
- Möglichkeit der optionalen Angabe einer Bezeichnung für die Überschrift des Kalenderfensters
Version 1.0.2.1
- Bugfix der Wochentagerkennung des ersten Tages im Monat.
(Dankeschön an Christian für das Suchen und Mitteilen der Bug-Position)
Version 1.0.2.0
- Performanceverbesserung durch Code-Optimierung by Wolfgang
- „Zell-Status-Erkennung“ um das versehentliche Überschreiben von bestimmten Zellen (mit Formel belegt, gesperrt, etc.) zu vermeiden.
- Vergrößern des auswählbaren Jahreszeitraumes auf -99 bis +100 Jahre
- 3. Button innerhalb der Beispieldatei, mittels welchem der Kalender mit Bezug auf die aktuell markierte Zelle geöffnet wird.
Version 1.0.1.0
- direkter Kalenderaufruf via Makro mit dem Ziel des Datumwertes auf eine beliebige Zelle eines Blattes
- Markierung des ausgewählten Datums innerhalb des Kalenders – falls kein Datum gesetzt, wird das aktuelle Datum markiert
Version 1.0.1.1
- das aktuelle und das gewählte Datum werden unterschiedlich farbig markiert
- Aufruf des Kalenders über einen Eintrag im Kontextmenü (Rechtsklick auf beliebige Tabellenzelle)
- das gewählte Datum wird in die Zelle auf welcher der Rechtsklick erfolgte eingetragen
- direktes Setzen des Datums über einen Eintrag im Kontextmenü (Rechtsklick auf beliebige Tabellenzelle)
- das aktuelle Datum wird sofort in die Zelle eingetragen
- ein Button zum Setzen des aktuellen Datums wurde dem Kalender hinzugefügt
Version 1.0.1.2
- Starten aller Features ohne Eintrag in Workbook_Open() Methode umgesetzt
- lediglich ein Neustart nach dem Importieren der Dateien muss noch durchgeführt werden
- Kontextmenü für den direkten Aufruf ders Kalenders wurde auf Tabellen erweitert
- Formatierung der Zielzelle wird beim Setzen des Datums beibehalten
- Samstage und Sonntage werden farblich abgesetzt dargestellt
Version 1.0.2.0
– Performanceverbesserung durch Codeoptimierung (danke an Wolfgang)
– Zell-Statuserkennung um versehentliches Überschreiben von gesperrten oder mit Formeln belegten Zellen zu vermeiden
– Nutzerinformation muss das Überschreiben vorab durch ein Dialogfenster bestätigen
– (ebenfalls danke an Wolfgang)
– Erweitern des Jahreszeitraumes auf – 99 Jahre bis + 100 Jahre des aktuellen Kalenderjahres
– Einfügen eines 3. Buttons, mittels welchem der Kalender mit Bezug auf die aktuell markierte Zelle geöffnet wird

Einfacher Einstieg dank mitgelieferter Beispieldatei
Um den Einstieg in den Kalender und die Verwendung der unterschiedlichen Features und Befehl zu erleichtern, beinhaltet der Download nicht nur die exportierten Module, sondern auch eine umfangreiche Beispieldatei in welcher alle Funktionen getestet und nachvollzogen werden können.
Neben der initialen Formularverwendung und der Umsetzung per Button direkt auf eine Zelle eines Tabellenblatts, beinhaltet das Beispiel auch die Anwendung des Kalenders über das per Rechtsklick aufrufbare Kontextmenü von Excel. Dieses Feature ist seit Version 1.0.1.2 Bestandteil des Kalendermoduls und macht es möglich entweder das heutige Datum, oder eine Datum durch Auswahl innerhalb des Kalenders, in die aktuell selektierte Zelle eintragen zu können.
Eine Tabelle mit geschützten Zellen und Formeln ermöglicht des Weiteren das Ausprobieren der integrierten Anzeige und Warnfunktionen. Diese wurden implementiert um den Inhalt der Zellen dieses Typs vor versehentlichem Überschreiben zu schützen.
Funktion der Buttons innerhalb der Beispieldatei
Button 1 (Beispiel Formular)
– Öffnet ein Formular, in welchem der Kalender mit Bezug auf eine Textbox geöffnet werden kann.
Button 2 (Eintrag in festgelegte Zelle)
– Setzt das Datum innerhalb einer festgelegten Zelle im angegebenen Tabellenblatt.
Button 3 (Eintrag in ausgewählte Zelle)
– Setzt das Datum innerhalb der aktuell markierten Zelle des aktiven Tabellenblattes.
'Aufruf Button 1 (Formularbeispiel)
Sub Form_open()
'Das Beispielformular "Aufruf_mit" anzeigen
Aufruf_mit.Show
End Sub
'Aufruf Button 2 (Zellenbeispiel mit fester Adressierung)
Sub Kalender_open()
'Kalender öffnen (gewünschten Blattnamen und Ziel-Zelle übergeben)
Call OpenKalenderSheet("Tabelle1", "F4")
End Sub
'Aufruf Button 3 (Zellenbeispiel mit Adressierung der aktuell ausgewählten Zelle)
Sub Kalender_open_selected_Cell()
'Kalender öffnen (aktuell gewählten Blattnamen und markierte Zelle übergeben)
Call OpenKalenderSheet(ActiveSheet.Name, ActiveCell.Address)
End Sub
Download – Basti Kalender für Visual Basic for Application
Laden Sie die aktuelle Version vom Basti Kalender direkt von meinem sicheren Webspace herunter. Das Archiv enthält alle benötigten Komponenten und eine Beispieldatei mit der alle Funktionen vorab getestet werden können.
VBA Kalendermodul (Zip-Archiv) (3348 Downloads ) VBA Kalendermodul (7-Zip-Archiv) (865 Downloads )Haftungsausschluss:
Die hier veröffentlichte Software wurde auf mehreren Systemen fehlerfrei getestet. Dennoch kann für evtl. Beschädigungen, Instabilitäten oder sonstige Beeinträchtigungen, welche unmittelbar durch die Installation, Nutzung, oder in sonstiger Weise in Zusammenhang stehend mit der hier zum Download angebotenen Software auftreten keinerlei Haftung übernommen werden. Der Download, die Installation und Nutzung geschehen auf eigenes Risiko! Bei Problemen wenden sie sich bitte an info@langer-sebastian.de.







Hallo Basti,
sehr tolles Toll, was du dir ausgedacht hast. Die Flexibilität und Unabhängigkeit ist spitze! Installation verlief problemlos.
Kurze Frage:
wär es auch denkbar den Kalender über ein Makro zu starten und den Datumswert nicht in ein Textfeld eines Formulas sondern direkt in eine Tabellen-Zelle einzutragen?
Eine hilfreiche Erweiterung wäre die farbliche Hervorhebung des heutigen Datums. Würdest du die umsetzen wollen oder ist das Projekt für dich beendet?
Gruß Maroris
Hallo Maroris,
sehr toll, es freut mich, dass dir der Kalender ebenso gute Dienste leistet wie mir. Die beiden von dir genannten Funktionen finde ich wirklich sinnvoll und nützlich, weshalb ich den Kalender überarbeitet und diese mit eingebaut habe. Dabei habe ich versucht darauf zu achten, dass die einfache Nutzbarkeit des Kalenders nicht großartig verkompliziert wird und an bereits bestehenden „Einbauten“ nicht überarbeitet werden muss. Eine Anleitung zu den neuen Funktionen habe ich oben unter dem Abschnitt „Erweiterung des Funktionsumfangs – Version 1.0.1.0 (04/2021)“ eingefügt. Über ein Feedback zur Nutzung und zum Updatevorgang (ich hoffe es ist einigermaßen verständlich) würde ich mich freuen. Dann schon mal viel Spaß damit…
Viele Grüße
Sebastian
Hallo Sebastian,
freut mich, dass meine Änderungsvorschläge so schnell angekommen sind und von dir auch umgesetzt wurden.
Um das Programm noch besser zu machen hätte ich noch zwei Vorschläge.
1. in der Kalenderansicht sollte der heutige Tag eine andere Farbe haben, als der Tag, der bereits in der Zelle steht. Steht in der Zelle z.B. 8.4. und heute ist der 26.4., dann dürften beide Tage mit unterschiedlichen Farben aufleuchten. Dies hilft wie ich finde sehr gut bei der Orientierung.
2. Bei einem ähnlichen Projekt, auf welches ich hier aber nicht verweisen möchte, fand ich die Zugänglichkeit des Kalenders sehr gut. Per Rechtsklick auf die gewünschte Zelle erschien das Kontextmenü. Dieses war um einen Eintrag „Kalender“ ergänzt. Somit konnte man intuitiv den Kalender starten. Selbstverständlich ginge das auch über einen Button in der Schnellstartleiste mit zugewiesenem Makro. Per Kontextmenü sind aber die Maus-Wege etwas kürzer und die Bedienung wird dadurch auch logischer.
Wenn du dies in den Makr0s ergänzen könntest, wäre das eine sehr schöne Erweiterung für deinen Kalender. Die Performance deiner Version ist nämlich wesentlich besser. Der Kalender erscheint ohne große Verzögerung.
Würde mich freuen.
Gruß Maroris.
Hallo Maroris,
Wow, die Möglichkeit das Kontextmenü per VBA zu erweitern war mir noch gar nicht bekannt. Das werde ich in Zukunft sicherlich des Öfteren nutzen. Die Umsetzung hierfür war noch nicht einmal allzu schwierig, weshalb ich gleich einen zweiten Eintrag für das Setzen des aktuellen Datums mit integriert habe. Das einzige was mich an der Umsetzung ein wenig stört ist, dass man um diese Funktion auch nutzen zu können, nun zusätzlich einen Eintrag in der „workbook_open()“ Methode anlegen muss. Mit der erweiterten Anleitung von oben sollte das aber auch kein Problem sein und vielleicht fällt mir ja noch eine bessere Lösung dazu ein.
Ich habe außerdem, so wie beim „Vorbild“ von Microsoft, einen Button für das aktuelle Datum ins Kalenderform integriert. So kann man nun unabhängig vom angezeigten Monat immer schnell das aktuelle Datum setzen. Um alle Neuerungen nutzen zu können, müsstest du allerdings nochmals den Updatevorgang, wie oben beschrieben, mit den aktuellen Dateien von Version 1.0.1.1 durchführen und die besagte „workbook_open()“ Methode anlegen. Falls diese bei dir schon vorhanden sein sollte, müsstest du diese dann um den oben genannten Aufruf „Call Kalendermodul.KontextMenuAdd“ erweitern.
So dann, viel Spaß damit! Über ein Feedback, wie du die Änderungen findest, würde ich mich freuen.
Viele Grüße
Sebastian
Hallo Sebastian,
nun habe ich endlich Zeit gefunden, dir Rückmeldung zu geben. Ich freue mich wirklich sehr darüber, dass du meine Vorschläge umgesetzt hast.
Die Integration in ein bestehendes Projekt verlief problemlos.
Etwas schade ist, dass das VBA Kalendermodul nur in Projekten funktioniert, in welchen man in der „workbook_open()“ Methode den Call Aufruf eingebunden hat. Vielleicht ist es auch möglich, in einer Excel-Vorlage zu integrieren (STARTXL) Verzeichnis, so dass die Methode bei jedem Excel-Start geladen wird. Dann wäre dein Kalender-Modul quasi in jeder Excel-Mappe aktiv, ohne dass jede Arbeitsmappe eine Anpassung der obigen Methode benötigt.
Hilfreich ist der Button Aktuelles Datum einfügen. Sehr gut!
Die Verwendung des Kontextmenüs funktioniert außerhalb von Tabellen. Innerhalb von Tabellen werden nach Rechtsklick deine Kontextmenü-Einträge nicht geladen. Hast du hierfür eine Lösung? Vielleicht hilft das hier: http://www.office-loesung.de/ftopic451689_0_0_asc.php
Gibt es einen Grund, warum die eingefügten Daten linksbündig sind? Gebe ich von Hand ein Datum in eine leere Zelle ein, wird automatisch das Datenformat von Standard auf Datum geändert und das Datum wird rechtsbündig formatiert. Verwende ich hingegen das Kalendermodul zur Eingabe eines Datums, erscheint das Datum linksbündig.
In manchen Kalendern werden die Tage Samstag und Sonntag in einer dezent anderen Farbe als die Wochentage ausgefüllt. Dies kann eine schnelle Orientierung ermöglichen. Ist aber sicherlich Geschmackssache 🙂
Ich freue mich über jede Verbesserung. Danke für den Dialog !
Viele Grüße
Maroris
Hallo Maroris,
ich habe die workbook_open() Methode durch einen Autostart-Aufruf innerhalb des Kalendermoduls ersetzt. Damit ist ein Eintrag in diese nicht mehr nötig und das alleinige Importieren der beiden Komponenten (Kalendermodul & Formular) reicht jetzt wieder aus. Das Kontextmenü wird nun auch auf Tabellen angewendet (Danke für den Hinweis & Link) und Samstage und Sonntage, wie oben zu sehen, mit leichten Grautönen hinterlegt.
Die Ausrichtung des Datums innerhalb der Zelle habe ich nun so umgesetzt, dass die vorherige Formatierung der Zelle einfach beibehalten wird. Ist die Zelle oder Spalte komplett rechtsbündig ausgerichtet, so wird das Datum ebenfalls rechtsbündig ausgerichtet. Somit ist man da flexibel und nicht auf eine Einstellung festgelegt. Zum Updatevorgang brauch ich dir ja glaube ich nichts mehr sagen (das Entfernen des workbook_open() Eintrages nicht vergessen)…
Viele Grüße
Sebastian
Perfekt! Vielen Dank Sebastian, funktioniert alles!
Man spürt mit was für einem Elan und Energie du hinter deinen Projekten stehst!
Hallo Sebastian
danke für Bereitstellung deines Kalenders.
Leider bekomme ich es nicht hin, diesen Kalender auf meine vorhandene Userform (umfangreiches Kassenbuch) zu
zu importieren. Also der Import klappt schon, aber beim Ausprobieren bekomme ich eine Fehlermeldung :bei
„Date“ und „Format“ erscheint „Projekt oder Bibliothek nicht gefunden.
Ich könnte Dir auch mal die kpl. Exceldatei schicken.
Viele Grüße aus Sachsen
Armin
Hallo Armin,
schau im VBA-Editor mal im Menüreiter „Extras“ unter „Verweise“ ob da irgendein Verweis als „NICHT VORHANDEN“ angezeigt wird. Eine Hilfe dazu findest du vielleicht in folgendem Microsoft Dokument:
https://docs.microsoft.com/de-de/office/vba/language/reference/user-interface-help/can-t-find-project-or-library
Viele Grüße
Sebastian
Hallo Sebastian, ein tolles Tool hast du da entwickelt. Kann dein Date picker auch mehrere Tage auswählen?
Hallo Eike,
vielen Dank für den Zuspruch zum Kalender. Aktuell kann man nur einen einzigen Tag auswählen, da dies für meine Zwecke immer gereicht hat. Eine Umsetzung zur Auswahl mehrerer Tage oder eines Zeitraumes an Tagen wäre aber durchaus machbar. Falls du so etwas brauchen solltest, könnte ich dies sicherlich nachträglich einfügen.
Viele Grüße
Sebastian
Hallo,
ich habe leider ein Problem mit dieser Erweiterung, bereits beim Start es Beispiels bekomme ich einen Laufzeitfehler mit der Meldung „Das angegebene Objekt konnte nicht gefunden werden“. Nach dem Klick auf „Debuggen“ stehe ich in der Zeile „Kalender.Controls(„CommandButton“ & Start).Caption = „1““. Bitte um Hilfe.
Hallo Chris,
das ist ungewöhnlich, normalerweise läuft der Kalender recht problemlos. Gerade das Kalenderbeispiel sollte eigentlich auf Anhieb funktionieren. Ich habe versucht die Fehlermeldung zu reproduzieren, doch selbst das Löschen des ersten Buttons oder des kompletten Kalenderformulars führte nicht zum beschriebenen Fehler.
Das der Fehler durch eine bestimmte Excelversion verursacht wird, lässt sich natürlich nie zu 100% ausschließen. Wenn du mir da ein paar weitere Informationen zukommen lassen könntest (Excelversion, Windowsversion, etc… ), dann könnte ich vielleicht den Fehler näher eingrenzen und eine Lösung dafür erarbeiten. Die Infos kannst du mir gern an info@langer-sebastian.de senden. Sorry, dass ich vorerst nicht mehr für dich tun kann…
Beste Grüße
Sebastian
Hallo Sebastian,
ich glaube die Archive sind kaputt. So meint es zumindest Winrar, egal bei welcher Version. Es kommen zwar die Dateien mit der richtigen Kilobytegröße an, aber sie lassen sich nicht ohne Fehler entpacken.
Viren-Scanner wurde auch kurzfristig deaktiviert, hat aber nicht geholfen.
Grüße Gernot
Hallo Gernot,
vielen Dank für den Hinweis. Ich habe letztens die Dateien per FTP-Programm nochmals geupdated, doch anscheinend scheint WordPress das nicht zu mögen. Nun habe ich die selben Dateien nochmals per WordPress-GUI hochgeladen und das scheint das Problem behoben zu haben. Ich schick dir die Dateien noch per E-Mail, es wäre trotzdem super, wenn du den Download nochmal ausprobieren könntest.
Viele Grüße
Sebastian
Hallo Sebastian,
einen tollen Kalender hast du hier entwickelt.
Einen Erweiterungsvorschlag hätte ich: wenn es auf einem Userform mehrere Buttons für den Kalenderaufruf gibt, wäre es sinnvoll mit dem Aufruf eine Bezeichnung als dritten Argument mitzugeben – dies könnte die Caption oder für einen Label sein.
So kann der User erkennen bei welcher Eingabe er sich befindet.
Grüße, Kurt
Hallo Kurt,
vielen Dank für das nette Feedback.
Das mit der Bezeichnung ist eine sehr gute Idee, welche ich soeben mit Version 1.0.2.2 umgesetzt habe.
Mir war wichtig, dass alle bereits erstellten Kalenderaufrufe ihre Funktionalität behalten und nicht nachträglich angepasst / überarbeitet werden müssen. Dazu habe ich die Angabe der Bezeichnung als optionalen Parameter hinzugefügt.
Falls du die Änderung nicht schon selbst gemacht hast, kannst du die aktuelle Version ab sofort downloaden.
Viele Grüße
Sebastian
Hallo Basti,
der Datepicker ist genial. Gibt es eine Möglichkeit das man das Jahr vor dem Start festlegen kann?
Viele Grüße
Ralf
Hallo Ralph,
vielen Dank für dein nettes Feedback.
Ich habe dir eine angepasste Version erstellt und an deine Mailadresse gesendet.
Über ein Feedback zum umgesetzten Feature würde ich mich sehr freuen.
Viele Grüße
Basti
Hallo Basti,
ich habe leider keine angepasste Version von dir bekommen. Kannst du mir bitte diese nochmal schicken.
Viele Grüße
Ralf
Hallo Ralph,
ich habe dir die Datei noch einmal zugesendet. Vielleicht landet es aufgrund des angehängten Zip-Archives ja im Spam-Ordner!?
Falls du trotzdem nichts bekommen haben solltest, kann es auch sein, dass deine hinterlegte E-Mailadresse nicht passt. Ist das der Fall, dann sende mir am besten an info@langer-sebastian.de eine Mail, dann schicke ich dir das Zip-Archiv auf diese Adresse zurück.
Viele Grüße
Basti
Hallo Basti,
ich habe die Datei von dir im Spam-Ordner gefunden. Genau so wie von dir beschrieben klappt es nun mit der Vorgabe des Jahres.
Perfekt und vielen Dank.
Viele Grüße
Ralf
Hallo Basti,
wenn man mit der rechten Maustaste das „Basti-Menü“ benutzt um den Datepicker aufzurufen, kann man dabei auch das gewünschte Jahr vorgeben?
Viele Grüße
Ralf
Hallo Ralph,
ich habe dir eine Mail geschickt und hoffe, dass ich dein benötigtes Feature richtig interpretiert und passend umgesetzt habe. Falls nicht, einfach nochmal melden! Bitte check auch wieder den SPAM-Ordner, falls meine Mail wieder da gelandet sein sollte! 🙂
Viele Grüße
Sebastian
Hallo Basti,
tolles Kalendertool.
Vielleicht kann man das Klassenorientiert machen. Ich hab das einmal ausprobiert das geht auf den ersten Blick ganz gut.
Folgendes ist dazu erforderlich.
Einfach ein Klassenmodul mit dem Namen clsKalender den Projekt hinzufügen.
Klassenmodul clsKalender:
——————————————————————————————————————–
Option Explicit
Public WithEvents KalenderButton As MSForms.CommandButton
Property Set ctrlbutton(Button As MSForms.Control)
Set KalenderButton = Button
End Property
Private Sub KalenderButton_click()
Kalender.doAction (Format(KalenderButton.Caption, „00“) & „.“ & Format(Kalender.Monat.ListIndex + 1, „00“) & „.“ & Kalender.Jahr.Text)
End Sub
—————————————————————————————————————-
In UserFrom muß dann folgendes hinzugefügt werden.
In der Ojektansicht habe ich die Commandbuttons in einen Frame mit dem Namen ‚Kalenderframe‘ gelegt.
Den Callback UserForm_QueryClose habe ich nur dazugefügt, falls man die Userform über das Schliessen im Dialogetitel schliesst.
Damit der eventuell aufrufende Dialog nicht mitgeschlossen wird.
UserForm Kalender:
—————————————————————————————————————-
Option Explicit
Public colKalender As Collection
Private Sub UserForm_Initialize()
Dim Kalender As clsKalender
Dim ctrl As MSForms.Control
Set colKalender = New Collection
For Each ctrl In Kalenderframe.Controls
If TypeName(ctrl) = „CommandButton“ Then
Set Kalender = New clsKalender
Set Kalender.ctrlbutton = ctrl
colKalender.Add Kalender
End If
Next ctrl
Set Kalender = Nothing
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Cancel = 1
Kalender.Hide
End Sub
Private Sub UserForm_Terminate()
Set colKalender = Nothing
End Sub
—————————————————————————————————————
Die ganzen CommandButton_Click(), kannst du dann rausschmeißen.
Das verbessert selbstverständlich nicht wirklich etwas. Und ich habe auch nicht getestet ob das alle Anforderungen gerecht wird.
Aber dein Code wird schlanker und besser.
Nur so eine Idee.
Gute Arbeit. Vielen Dank!
Gruß Ulrich
Servus Ulrich,
vielen Dank, dass mit der Klasse ist eine gute Idee!
Wenn ich das nächste Mal größere Umbauten am Kalender mache, versuch ich das mit umzusetzen.
Die vielen CommandButton_Click() Events haben mich damals schon gestört. Leider habe ich zu der Zeit keine Methode gefunden das als Funktion umzusetzen und wenn’s erst einmal „verbrochen“ ist, dann bleibt’s oft einfach so.
Gut das man da bisher nichts groß anpassen musste, bei mehr als 30 Events hätte ich mich dafür wieder selbst gehasst :-D!
Viele Grüße
Sebastian
Hallo Basti,
ich kenne das.
Alleine entwickelt man meistens ziemlich aus dem Stehgreif .
Ist ja auch nicht allzu wichtig. Hauptsache der Code funktioniert und nichts stürzt ab.
Es gibt manchmal richtige Code-Fetischisten, die bauen aus Allem eine Klasse, auch wenn die dann nur einmal ohne Ableitung, Vererbung oder sonstwas benutzt wird. In VBA jetzt nicht unbedingt, da geht ja in der Richtung meines Wissens sowieso nicht viel,
aber in anderen Programmiersprachen schon.
Falls du das Projekt nochmal überarbeiten solltest, wäre eine Kalenderwoche, zumindest optional , nicht schlecht.
Wie auch immer, ich kann das gut gebrauchen und es funktioniert problemlos.
Viele Grüße
Ulrich
Hallo Basti
Kann man den Kalender auch so anpassen, das er ab den Start-Tag bis zum End-Tag nur den Tag in einem Monat in einer Zeile einträgt.
Und sie dann evtl. Farblich verbindet, für einen Urlaubsplan.
Gruß
Thorsten
Hallo Thorsten,
das sollte möglich sein, jedoch müsste man dafür eine neue Funktion implementieren, welche genau das zur Verfügung stellt. Der Source-Code ist offen zugänglich, da könntest du die Funktion einbauen und mit den bereits vorhandenen Funktionen den Kalender steuern. Das farbliche Hinterlegen ist sicherlich der schwierigste Teil…
Grüße
Sebastian
Hallo Sebastian,
ganz herzlichen Dank für deine hervorragende Arbeit, die uns Usern das Programmieren in VBA um so viel leichter macht.
Ich habe den Kalender nun in all meinen Projecten importiert und bin sehr zufrieden.
Hallo Günter,
Vielen Dank für das Lob, es freut mich das der Kalender dir gute Dienste leistet.
Viele Grüße
Sebastian
Hey Basti.
erstmal Danke für deine Mühe was dieses Thema betrifft.
Ich habe eine Frage:
Da ich deine VBA Module beruflich verwenden möchte habe ich ein Problem. Unser Excel ist innerhalb eines firmlichen Schutztunnels aufgebaut. Das heisst, das ich jedes einzelne Modul seperat in meine Excel Arbeitsmappe integrieren muss.
So weit so gut. Das habe ich gemacht. Das Problem ist nun, das ich beim Ausführen des Makros „Kalender_open“ die Fehlermeldung “ Fehler beim kompilieren: Variable nicht definiert “ erhalte.
Danach wird der VBA Code: Sub OpenKalenderSheet(SheetName As String, SheetCell As String) gelb unterlegt angezeigt.
Leider weiß ich dann keinen Ausweg. Vielleicht hast du einen Rat wi man diesen Fehlercode behebt?
Hallo Daniel,
ich habe dir eine Mail auf die angegebene Mail-Adresse geschickt und hoffe das Dir die Infos weiterhelfen.
Viele Grüße
Sebastian