Basti Kalender – Der Ersatz für den Microsoft Date and Time Picker

Warum ein eigener Kalender

Ich musste beim Erstellen vieler meiner VBA* Anwendungen dem Nutzer die Möglichkeit geben das aktuelle Datum oder auch ein bestimmtes Bearbeitungs- oder Zieldatum eingeben zu können. Um die Eingabe etwas komfortabler zu gestalten, nutzte ich dafür 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 kann. Beim Klicken auf einen bestimmten Tag wird dann das ausgewählte Datum in die Dropdown Box übernommen, wo es vom VBA*-Code ausgewertet werden kann.

 

Screenshot des Microsoft Date and Time Pickers

 

Leider machte dieses nützliche Tool nach der Umstellung auf Windows10 und Office 2016 (jeweils 64-bit) Probleme. Beim Öffnen der mit dem „Microsoft Date and Timer Picker“ ausgestatteten Dokumente kam es zu einer Fehlermeldung. Excel meldete, dass die Datei „MSCOMCT2.OCX“ nicht gefunden werden konnte und der „Microsoft Date and Timer Picker“ konnte nicht mehr genutzt werden. Die Datei sollte laut Pfadangabe eigentlich im Office Installationsverzeichnis, oder unter „C:\Windows\SysWOW64“ zu finden sein, was aber nicht der Fall war. Ich schrieb mittels VBS einen Patch welcher diese Datei nachinstalliert und diese auch am System registriert. 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.

Um nicht mit einem unserer Systemadministratoren jeden Rechner, auf dem eine meiner Listen genutzt wird, mühsam aufsuchen zu müssen, blieb mir nur Eines übrig. Ich musste eine Möglichkeit finden, wie ich die Funktionalität des „Microsoft Date and Timer Pickers“ ohne die Verwendung der „MSCOMCT2.OCX“ weiterhin nutzen kann. Aus diesem Grund erstellte ich den „Basti Kalender“, welcher hierfür lediglich die VBA* Grundelemente nutzt.      

 

Screenshot des VBA Basti Kalenders

 

Funktion

Beim Erstellen 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. Dazu erstellte ich ein Formular namens „Kalender“, welche die Oberfläche des Kalenders (siehe Screenshot oben) enthält und 1 Modul namens „Kalendermodul“ in welchem sich die Programm-Logik hinter dem Kalender befindet.

 

Einbinden in ein bestehendes VBA-Projekt    

Um den Kalender in ein bestehendes VBA Projekt einbinden zu können, importiert man 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. Im anschließenden Dialogfenster wählt man schließlich die beiden Dateien aus (Hinweis: Der Import muss getrennt voneinander erfolgen!) und klickt zum Bestätigen auf OK.

 

Importieren der beiden Dateien „Kalender.frm“ und „Kalendermodul.bas“ ins aktuelle VBA-Projekt

 

Anschließend fügt man in das Formular, in welchem der Kalender verwendet werden soll einen Button und falls noch nicht vorhanden eine TextBox ein. In diese TextBox wird später das Datum, welches im Kalender ausgewählt wurde, eingetragen.    

 

Screenshot Button und TextBox für Datumsauswahl

 

Nun 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! Das Formular trägt im gezeigten Beispiel den Name Aufruf_mit!  
  • FormTextBox:
    • der Name der Textbox welche später das Datum anzeigen soll als Element vom Typ string, weshalb hier Anführungszeichen benötigt werden! Die TextBox trägt im gezeigten Beispiel den Name TextBox1!  

Diese Vorgehensweise hat den Vorteil, dass mehrere Kalender-Buttons mit unterschiedlichen TextBox-Zielen in ein und dasselbe Formular eingefügt werden können, wie man am folgenden Beispiel mit 2 TextBoxen und 2 Kalender Buttons erkennen kann.

 

Screenshot der Verwendung von 2 TextBoxen inkl. 2 Kalender Buttons in einem Formular

 

Der Aufruf des Kalenders unterscheidet sich dabei lediglich am an zweiter Stelle übergebenen FormTextBox-Parameter der OpenKalenderForm-Methode. 

 

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. 

 

Erweiterung des Funktionsumfangs (letzte Änderung 24.06.2021)

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

 

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 zusätzlich direkt über ein Makro gestartet werden kann und anschließend der gewählte Datumswert nicht in eine Textbox, sondern in eine Tabellenzelle eingetragen wird, erweiterte ich den Kalender um diese Funktion. Damit bereits angelegte Kalenderaufrufe ihre Gültigkeit behalten und nicht nachträglich überarbeitet werden müssen, entschied ich mich dazu für den Aufruf einen weiteren Befehl zu integrieren. Möchte man die neue Funktion nutzen, so ruft man nach dem Anlegen eines neuen Makros den Befehl 

 

Call OpenKalenderSheet(SheetName, SheetCell)

 

innerhalb der angelegten Sub-Anweisung auf. Dieser Aufruf erwartet, ebenso wie der oben genannte Aufruf für die Methode OpenKalenderForm, die Übergabe von zwei Parametern.

  • SheetName:
    • der Name des Ziel-Tabellenblattes in welchem sich die Zelle mit / für das Datum befindet  und SheetCell die Zielzelle innerhalb dieses Blattes enthalten muss. 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“!

Zur besseren Erklärung habe ich die Beispieldatei um einen Button erweitert, welcher beim Klicken folgende Sub-Anweisung (Makro) aufruft und ausführt.

 

Sub Kalender_open()
    'Kalender öffnen (gewünschten Blattname und Ziel-Zelle übergeben)
    Call OpenKalenderSheet("Tabelle1", "A8")
End Sub

 

Klickt man also auf den Button, so öffnet sich direkt der Kalender und das im Tabellenblatt „Tabelle1“ in Zelle „A8“ eingetragene Datum, sofern vorhanden, wird im Kalender markiert. Ist noch kein Datum in der Zelle vorhanden, so wird der heutige Tag markiert. Klickt man nun auf einen belliebigen Tag im Kalender, so wird das Datum in der angegebenen Zelle aktualisiert und der Kalender automatisch geschlossen.

 

Screenshot des aktualisierten Basti Kalenders mit dem Aufruf über OpenKalenderSheet(SheetName, SheetCell)

 

Die neu umgesetzte visuelle Markierung des ausgewählten Datums funktioniert nicht nur für den direkten Aufruf via Makro, sondern auch mit den bereits vorhandenen Formularaufrufen. Um die neuen Funktionen in bereits bestehenden Listen mit Kalenderversion 1.0 nutzen zu können, muss diese wie folgend beschrieben geupdated werden.

 

Nutzen der Schnellauswahl über das Kontextmenü (ab Version 1.0.1.1)

Eine weitere Erweiterung ist die Möglichkeit den Kalender über einen Eintrag im Kontextmenü aufrufen zu können. Dieses öffnet man per Rechtsklick auf eine beliebige Stelle innerhalb des Tabellenblattes. Im ausgeklappten Kontextmenü findet man anschließend die beiden Menüpunkte „Basti – Kalender öffnen“ und „heutiges Datum setzen“, wobei der erste Eintrag das Kalenderfenster öffnet, während der zweite Eintrag das aktuelle Datum ohne Kalenderanzeige setzt. Der Eintrag des ausgewählten Datums erfolgt bei beiden Varianten in die Zelle, auf welche der Rechtsklick getätigt wurde.

 

Screenshot der Auswahlmöglichkeiten im Kontextmenü

 

Nur für Version 1.0.1.1 benötigter Eintrag in der workbook_open() Methode

Um die Funktion nutzen zu können, müssen allerdings die beiden Einträge dem Kontextmenü beim Öffnen des Workbooks hinzugefügt werden. Dies geschieht durch das Anlegen der „workbook_open()“ Methode innerhalb der aktuellen Arbeitsmappe. Diese findet man unter dem Namen „DieseArbeitsmappe“ innerhalb des „Microsoft Excel Objekte“-Ordners. 

 

Screenshot „DieseArbeitsmappe“ inkl. der „workbook_open()“ Methode

 

Die anzulegende „workbook_open()“ Methode enthält hierbei lediglich einen Aufruf. Sollte die Methode im Dokument bereits vorhanden sein, so muss diese lediglich um den Aufruf „Call Kalendermodul.KontextMenuAdd“ erweitert werden. Nachfolgend noch einmal die komplette Methode als Code.

 

Sub workbook_open()
    
    'anlegen der Kontextmenueinträge
    Call Kalendermodul.KontextMenuAdd
        
End Sub

 

Hinweis: Der Eintrag in der workbook_open() Methode gilt ausschließlich für Version 1.0.1.1 und wurde ab Version 1.0.1.2 durch eine Autostart-Methode ersetzt. 

 

zusätzliche Erweiterungen in Version 1.0.1.1

Mit Version 1.0.1.1 wurden des Weiteren Änderungen eingeführt, für welche keine speziellen Anpassungen nötig sind. So wird nun das aktuelle Datum (rot) und das evtl. bereits gesetzte Datum (grün) innerhalb des Kalenders farblich unterschiedlich dargestellt. Außerdem installierte ich, ähnlich wie beim „Microsoft Date and Time Picker“ unterhalb des Kalenders einen Knopf, mit welchem das aktuelle Datum sofort gesetzt werden kann.

  

Screenshot des VBA Basti Kalenders ab Version 1.0.1.1

 

Diese Änderungen werden mit dem Updaten oder Installieren der Version 1.0.1.1 automatisch verfügbar und benötigen keine Änderung an evtl. bereits bestehenden Kalenderaufrufen.

 

zusätzliche Erweiterungen in Version 1.0.1.2

Die wichtigste Neuerung ab Version 1.0.1.2 ist das Wegfallen des in Version 1.0.1.1 benötigten Eintrages in der workbook_open() Methode. Das Kalendermodul und das Formular funktionieren nun auch ohne diesen Eintrag. Lediglich ein erneutes Öffnen der Excel-Datei muss nun nach dem Importieren der Komponenten noch durchgeführt werden.

Außerdem änderte ich das Einfügen des Datums insofern ab, dass nun die Ausgangsformatierung (Ausrichtung) der Zelle, in welche das Datum eingefügt werden soll, beibehalten wird. Um den Vorgang besser zu veranschaulichen, habe ich in das Beispieldokument eine Tabelle integriert, an der man dies gut erkennen und auch selbst ausprobieren kann.

 

Screenshot der Testdatei mit neuer Tabelle und beibehaltener Formatierung (Ausrichtung) nach dem Einfügen des Datums

 

An dieser Tabelle kann man ebenfalls den nachgerüsteten Zugriff über das Kontextmenü für integrierte Tabellen (Danke für den Hinweis Maroris) testen. Des Weiteren habe ich den Vorschlag, die Samstage und Sonntage zur besseren Orientierung leicht unterschiedlich zu gestalten, ebenfalls in Version 1.0.1.2 mit umgesetzt. Diese werden jetzt in dezenten Grautönen dargestellt.

  

Screenshot des Basti-Kalenders mit farblicher Abhebung der Samstage und Sonntage

 

Performanceverbesserung und Erweiterungen in Version 1.0.2.0

Vor einigen Tagen nahm ein anderer begeisterter VBA-Programmierer Kontakt zu mir auf. Er war ebenfalls auf der Suche nach einer Lösung für das Date & Time Picker Problem und ist dabei über meinen Lösungsansatz gestolpert. Nachdem er sich meinen VBA-Code angeschaut hatte, kamen ihm noch einige Ideen und auch der ein oder andere Verbesserungsansatz, wie man den Kalender noch performanter gestalten könnte. Er machte sich die Arbeit und überarbeitete die entsprechenden Stellen im Code um mir die aktualisierte Version anschließend per Mail zurück zu senden. 

Darin erweiterte er unter anderem den Kalender durch eine „Zell-Status-Erkennung“, in welcher der Anwender das Überschreiben von bestimmten Zellen (mit Formel belegt, gesperrt, etc.) vorab mittels Dialogfenster bestätigen muss. Diese Funktion verhindert somit ein ungewolltes Überschreiben von gesperrten oder mittels Formeln belegten Zellen. Ein Testtabelle zu dieser neuen Funktion habe ich der Beispieldatei hinzugefügt. 

Außerdem setzte ich seinen Vorschlag, den zurückliegend auswählbaren Jahresbereich zu vergrößern, mit dieser Version ebenfalls in die Tat um. Die bis dato möglichen 5 Jahre rückwirkend waren noch ein Relikt aus dem ursprünglichen Einsatzgebiet des Kalenders und dort vollkommen ausreichend. Da es aber durchaus Anwendungsfälle mit größeren zurückliegenden Jahresbereichen gibt, stehen nun 99 Jahre in die Vergangenheit und 100 Jahre in die Zukunft zur Verfügung. Dies sollte sicherlich erst einmal ausreichend sein.

Zu guter Letzt ergänzte ich die Beispieldatei noch um einen 3. Button, mittels welchem der Kalender mit Bezug auf die aktuell markierte Zelle geöffnet wird. Dies war ebenfalls Inhalt einer Nutzeranfrage, welche ich per Mail erhalten habe. Der Aufruf des Kalenders unterscheidet sich dabei nur unwesentlich vom Aufruf mit festem Zellbezug. Der Vollständigkeit halber hier nochmal die 3 Aufrufmethoden, wie sie im Modul1 des Beispielprojektes zu finden sind.

 

'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

 

Da die getätigten Änderungen der Version 1.0.2.0 am Erscheinungsbild des Kalenders nichts geändert haben und somit für den normalen Nutzer verborgen bleiben dürften, möchte ich mich hier noch einmal für die tollen Ideen, die großartige Unterstützung und den sehr netten Kontakt, ganz recht herzlich bei Wolfgang bedanken. So macht programmieren Spaß!

        

Vorgehensweise zum Update auf Version 1.0.2.0 (2021)

Wer bereits eine ältere Version des Basti Kalenders nutzt und gern auf die Version mit den neuen Funktionen umsteigen möchte, geht am besten wie folgt vor.

  • die hier als Download bereitgestellten Dateien herunterladen
  • das Projekt, in welchem der Basti Kalender bereits verwendet wird laden und den VBA-Editor öffnen
  • unter Formulare dein Eintrag „Kalender“ suchen und diesen mit Rechtsklick und der Auswahl von „Entfernen von Kalender…“ entfernen. Die Frage „Möchten Sie Kalender vor dem Entfernen exportieren?“ kann mit Nein beantwortet werden. 
  • unter Module dein Eintrag „Kalendermodul“ suchen und ebenfalls mit Rechtsklick und der Auswahl von „Entfernen von Kalendermodul…“ entfernen. Die Frage „Möchten Sie Kalendermodul vor dem Entfernen exportieren?“ kann ebenfalls mit Nein beantwortet werden. 
  • Jetzt können die beiden Dateien „Kalender.frm“ und „Kalendermodul.bas“, welche sich im in Schritt 1 heruntergeladenen Archiv des Basti Kalenders befinden, in das aktuelle Projekt einfügt werden. Die Vorgehensweise dazu kann, falls nötig, im Absatz „Einbinden in ein bestehendes VBA-Projekt“ noch einmal nachgelesen werden.

Jetzt befinden sich die aktualisierten Dateien im aktuellen Projekt und die neuen Funktionen sind nach dem Speichern und einem erneuten Öffnen der Datei verfügbar. Damit ist der Updatevorgang abgeschlossen.

 

Fazit

Seit dem Erstellen habe ich den Kalender nicht wirklich weiterentwickelt (stimmt nicht mehr ganz), da er seine Aufgabe zuverlässig erfüllt und die von mir genutzten Funktionen des „Microsoft Date and Timer Picker“ in keinerlei Hinsicht unterlegen sind. Der Fakt, dass dies ganz ohne die Nutzung von nachzuinstallierenden Plug-Ins oder Active-X Steuerelementen funktioniert machen den Basti Kalender dabei noch wartungsfrei und problemlos auf nicht-Administratoren Anmeldungen nutzbar.

 

Download Basti Kalender Projekt

Für meine Freunde und alle Interessierten biete ich hier das Basti Kalender Projekt zum Download an. Da es mit den *.ZIP Dateien evtl. zu Problemen beim Download kommen kann (ZIP-Archive werden in einigen Web-Browsern als potentielle Bedrohung erkannt und der Download blockiert), stelle ich die Datei sowohl als *.ZIP, als auch als *.7z zur Verfügung. Für die letztere Datei benötigt man das kostenlose Kompressionsprogramm 7-Zip* was hier* heruntergeladen werden kann. (https://www.7-zip.de/).   

 

Download “VBA Kalendermodul (Zip-Archiv)” VBA-Kalendermodul-1.0.2.0.zip – 305-mal heruntergeladen – 189 kB

Download “VBA Kalendermodul (7-Zip-Archiv)” VBA-Kalendermodul-1.0.2.0.7z – 86-mal heruntergeladen – 175 kB

 

Debugging:

Trotz größter Sorgfalt und mehrfachem Testen kommt es immer wieder vor, dass sich in Software Bugs oder Fehler einschleichen, welche beim Erstellen übersehen, oder einfach nicht gefunden werden. Wenn jemand so einen Fehler finden sollte, oder sonstige Anregungen, Ideen oder Verbesserungen zum Programm hat, dann wäre es schön wenn dies einfach im Kommentarbereich kommuniziert wird. So kann ich die Änderungen in das nächste Versions-Update einfach mit einfließen lassen. 

 

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!

 

9 Gedanken zu „Basti Kalender – Der Ersatz für den Microsoft Date and Time Picker

  • April 16, 2021 um 6:49 am
    Permalink

    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

    Antwort
    • April 17, 2021 um 11:17 pm
      Permalink

      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

      Antwort
  • April 26, 2021 um 7:35 am
    Permalink

    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.

    Antwort
  • April 27, 2021 um 7:48 am
    Permalink

    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

    Antwort
  • Mai 12, 2021 um 8:17 am
    Permalink

    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

    Antwort
  • Mai 14, 2021 um 9:47 am
    Permalink

    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

    Antwort
  • Mai 18, 2021 um 3:42 pm
    Permalink

    Perfekt! Vielen Dank Sebastian, funktioniert alles!
    Man spürt mit was für einem Elan und Energie du hinter deinen Projekten stehst!

    Antwort
  • Oktober 15, 2021 um 5:00 pm
    Permalink

    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

    Antwort

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.