Kennen Sie das Gefühl der Frustration, wenn ein perfekt funktionierendes Excel-VBA-Projekt plötzlich den Dienst verweigert, nur weil ein kleines, aber entscheidendes Steuerelement nicht geladen werden kann? Insbesondere unter Windows 7 64bit stoßen viele Entwickler und Power-User auf ein wiederkehrendes Problem mit dem beliebten DateTimePicker-Control, welches Teil der mscomct2.ocx-Bibliothek ist. Dieses nützliche Tool zur Datumsauswahl ist aus vielen Benutzeroberflächen in Excel-Anwendungen nicht mehr wegzudenken. Doch seine Inkompatibilität mit modernen 64-Bit-Systemen kann Kopfzerbrechen bereiten. Aber keine Sorge! Dieser umfassende Artikel beleuchtet nicht nur das Kernproblem, sondern präsentiert Ihnen auch detaillierte und praxiserprobte Alternativen, damit Ihre Excel-Lösungen weiterhin reibungslos funktionieren – und das ganz ohne Kompromisse bei der Benutzerfreundlichkeit.
Das Problem im Detail: Der DateTimePicker und die 64-Bit-Falle
Der Microsoft Date and Time Picker Control 6.0 (SP4), um den es hier geht, ist ein ActiveX-Steuerelement, das Entwicklern eine intuitive Möglichkeit bietet, Daten und Uhrzeiten in Formularen auszuwählen. Es ist Teil der Bibliothek mscomct2.ocx und war lange Zeit ein Standardwerkzeug in VBA-Projekten für Microsoft Office-Anwendungen, insbesondere Excel. Doch mit dem Aufkommen von 64-Bit-Betriebssystemen wie Windows 7 64bit und späteren Versionen entstand ein Kompatibilitätsproblem.
Der Kern des Dilemmas liegt in der Architektur. Viele der älteren ActiveX-Steuerelemente, einschließlich der mscomct2.ocx, wurden als 32-Bit-Komponenten entwickelt. Während ein 32-Bit-Office auf einem 64-Bit-Windows-System diese Steuerelemente noch laden kann (oft mit Tricks bei der Registrierung), scheitert ein 64-Bit-Office (oder eine 64-Bit-VBA-Umgebung) kläglich. Es kann schlichtweg keine 32-Bit-ActiveX-Komponenten direkt einbinden. Die Fehlermeldung „Steuerelement konnte nicht erstellt werden” oder ähnliche Hinweise sind die leidige Konsequenz.
Selbst wenn Sie versuchen, die Datei mscomct2.ocx manuell zu registrieren (z.B. mit regsvr32 C:WindowsSysWOW64mscomct2.ocx
für 32-Bit-Office auf 64-Bit-Windows), ist der Erfolg oft nur temporär oder tritt gar nicht ein, insbesondere wenn Sie eine 64-Bit-Version von Office verwenden. Dieses Problem betrifft nicht nur den DateTimePicker, sondern auch andere Steuerelemente aus den Microsoft Common Controls Bibliotheken. Für viele, die sich auf diese Controls verlassen haben, bedeutet dies, dass bestehende Anwendungen nicht mehr funktionieren oder neue nicht wie geplant entwickelt werden können. Das Ziel ist es, diese Abhängigkeit zu umgehen und robuste, zukunftssichere Lösungen zu finden.
Warum ist der DateTimePicker so begehrt? Benutzerfreundlichkeit und Effizienz
Bevor wir uns den Alternativen widmen, ist es wichtig zu verstehen, warum der DateTimePicker so beliebt ist. Seine Stärke liegt in der Benutzerfreundlichkeit und der Fehlervermeidung. Statt ein Datum manuell einzugeben (was zu Formatfehlern wie „01.13.2023” statt „13.01.2023” führen kann), bietet das Control einen visuellen Kalender. Ein Klick auf den gewünschten Tag, und das Datum ist korrekt formatiert im Feld. Das spart Zeit, minimiert Eingabefehler und sorgt für eine konsistente Datenqualität. Für komplexe Excel-Anwendungen mit vielen Datumseingaben ist dies ein unschätzbarer Vorteil. Daher ist das Ziel der Alternativen, genau diese intuitive Interaktion beizubehalten oder nachzubilden.
Ihre Alternativen im Überblick: Wege aus dem Dilemma
Glücklicherweise gibt es mehrere effektive Strategien, um das Fehlen des DateTimePicker-Controls zu überwinden. Jede hat ihre Vor- und Nachteile, und die beste Wahl hängt von Ihrem spezifischen Projekt, Ihrem technischen Know-how und Ihren Präferenzen ab. Hier sind die Hauptalternativen, die wir im Detail beleuchten werden:
- Der „Do-it-yourself”-Kalender in einem UserForm (Die Königslösung)
- Externe Add-Ins und Drittanbieter-Lösungen
- Manuelle Datumseingabe mit intelligenter Validierung
- Die Suche nach anderen Microsoft-Kontrollen (und warum sie oft scheitert)
Alternative 1: Der „Do-it-yourself”-Kalender in einem UserForm (Die Königslösung)
Diese Methode ist die vielleicht eleganteste und flexibelste Lösung, da sie Sie vollständig von externen Abhängigkeiten befreit und Ihnen volle Kontrolle über Design und Funktionalität gibt. Sie erfordert zwar etwas mehr VBA-Programmierkenntnisse, aber das Ergebnis ist eine maßgeschneiderte, robuste und portable Datumsauswahl, die in jeder Excel-Umgebung (32-Bit oder 64-Bit) funktioniert.
Konzept und Design eines benutzerdefinierten Kalenders
Die Idee ist, ein eigenes Excel-UserForm zu erstellen, das einen Kalender simuliert. Das Herzstück sind mehrere Label- oder CommandButton-Steuerelemente, die die Tage eines Monats darstellen, sowie Steuerelemente zur Navigation zwischen Monaten und Jahren.
Schritte zur Umsetzung:
- UserForm erstellen: Öffnen Sie den VBA-Editor (Alt + F11), klicken Sie mit der rechten Maustaste auf Ihr Projekt im Projekt-Explorer und wählen Sie „Einfügen” -> „UserForm”. Nennen Sie es z.B.
frmDatePicker
. - Design der Oberfläche:
- Ein TextBox-Steuerelement (z.B.
txtSelectedDate
) oben, um das aktuell ausgewählte Datum anzuzeigen und zurückzugeben. - Zwei CommandButton-Steuerelemente (z.B.
cmdPrevMonth
,cmdNextMonth
) für die Navigation zum vorherigen/nächsten Monat. - Ein Label-Steuerelement (z.B.
lblMonthYear
) zur Anzeige des aktuellen Monats und Jahres. - Sieben Label-Steuerelemente für die Wochentage (Mo, Di, Mi, Do, Fr, Sa, So).
- Bis zu 42 Label-Steuerelemente (6 Reihen à 7 Spalten) für die Tage des Monats (z.B.
lblDay(1)
bislblDay(42)
). Diese sollten ein Array bilden, um die Programmierung zu vereinfachen. Eine Alternative ist es, die Labels bei Bedarf dynamisch zu erstellen, aber für eine statische Lösung ist das Anlegen vieler Labels einfacher. - Ein CommandButton (z.B.
cmdOK
) zum Bestätigen der Auswahl und Schließen des Formulars. - Optional: Ein CommandButton (z.B.
cmdCancel
) zum Abbrechen.
- Ein TextBox-Steuerelement (z.B.
- VBA-Code-Logik: Dies ist der anspruchsvollste Teil. Sie benötigen Code, um:
- Kalender initialisieren: Beim Öffnen des UserForms soll der Kalender mit dem aktuellen Monat (oder einem vordefinierten Datum) gefüllt werden.
- Tage dynamisch befüllen: Eine Schleife füllt die Label-Steuerelemente für die Tage. Hierbei müssen Sie den ersten Wochentag des Monats bestimmen (z.B. mit
Weekday(DateSerial(Year, Month, 1))
) und die Anzahl der Tage im Monat berücksichtigen (Day(DateSerial(Year, Month + 1, 0))
). - Klicks auf Tage verarbeiten: Wenn ein Benutzer auf ein Tages-Label klickt, soll das Datum in
txtSelectedDate
angezeigt und als Rückgabewert gespeichert werden. - Monatsnavigation: Die
cmdPrevMonth
undcmdNextMonth
Buttons ändern die Variable für den Monat und rufen die Kalender-Aktualisierungsroutine auf. - Datum zurückgeben: Der
cmdOK
Button speichert das ausgewählte Datum in einer öffentlichen Variablen oder Eigenschaft des UserForms, sodass die aufrufende Prozedur es abrufen kann.
Beispiel-VBA-Struktur (Auszug):
' Im Modul des UserForms (frmDatePicker)
Private CurrentMonth As Long
Private CurrentYear As Long
Public SelectedDate As Date
Private Sub UserForm_Initialize()
CurrentMonth = Month(Date)
CurrentYear = Year(Date)
PopulateCalendar
End Sub
Private Sub PopulateCalendar()
Dim FirstDayOfMonth As Date
Dim DaysInMonth As Long
Dim StartWeekday As Long
Dim i As Long, dayCounter As Long
' Monats- und Jahresanzeige aktualisieren
lblMonthYear.Caption = Format(DateSerial(CurrentYear, CurrentMonth, 1), "MMMM YYYY")
' Alle Tages-Labels zurücksetzen
For i = 1 To 42 ' Annahme: 42 Labels für die Tage
Me.Controls("lblDay" & i).Caption = ""
Me.Controls("lblDay" & i).BackColor = &H8000000F ' Standardfarbe
Me.Controls("lblDay" & i).Tag = "" ' Datum im Tag speichern
Next i
' Ersten Tag des Monats bestimmen
FirstDayOfMonth = DateSerial(CurrentYear, CurrentMonth, 1)
StartWeekday = Weekday(FirstDayOfMonth, vbMonday) ' Montag = 1, Sonntag = 7
' Anzahl der Tage im Monat
DaysInMonth = Day(DateSerial(CurrentYear, CurrentMonth + 1, 0))
' Tage befüllen
dayCounter = 1
For i = StartWeekday To StartWeekday + DaysInMonth - 1
If i <= 42 Then ' Sicherstellen, dass das Label existiert
With Me.Controls("lblDay" & i)
.Caption = dayCounter
.Tag = DateSerial(CurrentYear, CurrentMonth, dayCounter)
.Font.Bold = False
If DateSerial(CurrentYear, CurrentMonth, dayCounter) = Date Then
.BackColor = RGB(255, 255, 150) ' Heutiges Datum hervorheben
.Font.Bold = True
End If
dayCounter = dayCounter + 1
End With
End If
Next i
End Sub
Private Sub lblDay1_Click() ' Beispiel für ein Tages-Label
' Event-Handler für alle lblDay(i)_Click-Ereignisse erstellen und eine gemeinsame Routine aufrufen
If Not Me.ActiveControl Is Nothing Then
If Left(Me.ActiveControl.Name, 6) = "lblDay" Then
If Me.ActiveControl.Tag <> "" Then
txtSelectedDate.Value = Format(Me.ActiveControl.Tag, "DD.MM.YYYY")
SelectedDate = Me.ActiveControl.Tag
' Optional: Highlight Selected Day
End If
End If
End If
End Sub
Private Sub cmdNextMonth_Click()
CurrentMonth = CurrentMonth + 1
If CurrentMonth > 12 Then
CurrentMonth = 1
CurrentYear = CurrentYear + 1
End If
PopulateCalendar
End Sub
Private Sub cmdPrevMonth_Click()
CurrentMonth = CurrentMonth - 1
If CurrentMonth < 1 Then
CurrentMonth = 12
CurrentYear = CurrentYear - 1
End If
PopulateCalendar
End Sub
Private Sub cmdOK_Click()
If IsDate(txtSelectedDate.Value) Then
SelectedDate = CDate(txtSelectedDate.Value)
Else
MsgBox "Bitte wählen Sie ein gültiges Datum.", vbCritical
Exit Sub
End If
Me.Hide
End Sub
Private Sub cmdCancel_Click()
SelectedDate = 0 ' Oder ein leeres Datum, um Abbruch zu signalisieren
Me.Hide
End Sub
Wichtiger Hinweis: Für die Klick-Ereignisse der Tages-Labels können Sie eine zentrale Event-Handler-Klasse nutzen, um nicht 42 einzelne Routinen schreiben zu müssen. Das ist etwas fortgeschrittener, aber effektiver. Alternativ kann man alle Labels einfach als CommandButtons
anlegen und deren _Click
Event nutzen.
Vorteile:
- Unabhängigkeit: Keine externen ActiveX-Komponenten oder Registrierungen erforderlich.
- Portabilität: Funktioniert zuverlässig auf allen Excel-Versionen und Windows-Architekturen (32-Bit/64-Bit).
- Anpassbarkeit: Vollständige Kontrolle über das Aussehen, die Farben, Schriften und zusätzliche Funktionen (z.B. Hervorheben von Feiertagen, Auswahl von Datumsbereichen).
- Keine Lizenzkosten: Wenn Sie die Lösung selbst entwickeln.
Nachteile:
- Entwicklungsaufwand: Erfordert VBA-Kenntnisse und Zeit für Design und Programmierung.
- Wartung: Muss bei gewünschten Änderungen manuell angepasst werden.
Alternative 2: Externe Add-Ins und Drittanbieter-Lösungen
Wenn Sie den Entwicklungsaufwand scheuen oder eine schnellere, professionell gewartete Lösung bevorzugen, können externe Add-Ins eine gute Option sein. Viele Anbieter haben die Lücke erkannt, die durch das Fehlen des DateTimePicker entstanden ist, und bieten eigene Lösungen an.
Arten von Lösungen:
- Excel-Add-Ins (.xlam): Diese werden direkt in Excel installiert und stellen oft benutzerdefinierte Funktionen oder Steuerelemente bereit.
- Kommerzielle ActiveX-Steuerelemente: Es gibt moderne, 64-Bit-kompatible ActiveX-Kalendersteuerelemente, die von Drittanbietern entwickelt und vertrieben werden. Diese sind in der Regel kostenpflichtig.
- Office-Add-Ins (JavaScript-basiert): Für modernere Office-Versionen (Office 2013 und neuer) gibt es Add-Ins, die auf Web-Technologien basieren und auch Datums-Picker anbieten. Diese sind plattformunabhängig, aber die Integration in Legacy-VBA-Projekte kann komplexer sein.
Vorteile:
- Sofort einsatzbereit: Oft mit professionellem Design und umfangreichen Funktionen.
- Wartung und Support: Kommerzielle Lösungen bieten in der Regel Support und Updates.
- Geringer Entwicklungsaufwand: Nach der Installation oft direkt nutzbar.
Nachteile:
- Kosten: Viele gute Lösungen sind kostenpflichtig.
- Abhängigkeit: Sie sind von einem Drittanbieter abhängig. Bei dessen Verschwinden oder mangelndem Support kann es zu Problemen kommen.
- Installationsaufwand: Müssen auf jedem Zielsystem installiert werden.
- Potenzielle Kompatibilitätsprobleme: Auch hier kann es zu Konflikten mit anderen Add-Ins kommen.
Alternative 3: Manuelle Eingabe mit intelligenter Validierung
Für weniger kritische Anwendungen oder wenn die Benutzerakzeptanz einer manuellen Eingabe hoch ist, können Sie auf eine grafische Datumsauswahl verzichten und stattdessen die Eingabe mit Excel-eigenen Mitteln und etwas VBA absichern.
Excel-Funktionen nutzen:
- Datenüberprüfung (Data Validation):
- Wählen Sie die Zellen aus, in die Daten eingegeben werden sollen.
- Gehen Sie zu "Daten" -> "Datenüberprüfung".
- Wählen Sie unter "Zulassen" die Option "Datum".
- Sie können Start- und Enddaten festlegen (z.B. "zwischen", "größer als" etc.).
- Konfigurieren Sie eine Eingabehilfemeldung, um den Benutzer über das erwartete Format zu informieren (z.B. "Bitte geben Sie das Datum im Format TT.MM.JJJJ ein.").
- Legen Sie eine Fehlermeldung fest, die erscheint, wenn ungültige Daten eingegeben werden.
- Zellformatierung:
- Stellen Sie sicher, dass die Zellen, die Daten enthalten sollen, als "Datum" formatiert sind (z.B. "TT.MM.JJJJ"). Excel versucht dann, Text in dieses Format zu konvertieren.
VBA zur weiteren Absicherung:
Für eine noch robustere Validierung können Sie das Worksheet_Change
-Ereignis nutzen, um die Eingabe sofort zu prüfen und gegebenenfalls korrigierende Maßnahmen zu ergreifen oder Feedback zu geben.
' Im Code-Modul des Arbeitsblattes
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range
Set Rng = Intersect(Target, Me.Range("A:A")) ' Beispiel: Spalte A soll Daten enthalten
If Not Rng Is Nothing Then
If Rng.Cells.Count = 1 Then ' Nur bei einzelner Zelländerung prüfen
If Not IsEmpty(Rng.Value) Then
If Not IsDate(Rng.Value) Then
Application.EnableEvents = False ' Events vor Änderung deaktivieren
MsgBox "Ungültiges Datum eingegeben. Bitte verwenden Sie das Format TT.MM.JJJJ.", vbCritical
Rng.ClearContents ' Oder den alten Wert wiederherstellen
Application.EnableEvents = True
Else
' Optional: Datum in ein spezifisches Format konvertieren
Rng.Value = Format(Rng.Value, "DD.MM.YYYY")
End If
End If
End If
End If
End Sub
Vorteile:
- Einfach zu implementieren: Besonders die Excel-Datenüberprüfung ist schnell eingerichtet.
- Keine externen Controls: Völlige Unabhängigkeit von ActiveX oder Drittanbietern.
- Geringer Entwicklungsaufwand: Minimale VBA-Kenntnisse erforderlich.
Nachteile:
- Weniger benutzerfreundlich: Keine visuelle Hilfe, anfälliger für manuelle Eingabefehler, trotz Validierung.
- Feedback erst nach Eingabe: Fehler werden erst nach dem Verlassen der Zelle oder dem Bestätigen der Eingabe erkannt.
Alternative 4: Die Suche nach anderen Microsoft-Kontrollen (und warum sie oft scheitert)
Manche Nutzer suchen nach anderen "eingebauten" Microsoft-Controls in der Hoffnung, einen Ersatz zu finden. Ein Kandidat, der manchmal genannt wird, ist das Microsoft Calendar Control 10.0 (MSCAL.OCX). Dieses ist jedoch noch älter als der DateTimePicker und ist ebenfalls eine 32-Bit-ActiveX-Komponente. Es leidet unter genau denselben Kompatibilitätsproblemen auf 64-Bit-Systemen und ist oft noch schwieriger zu registrieren oder überhaupt zu finden.
Grundsätzlich gilt: Wenn das ursprüngliche DateTimePicker (mscomct2.ocx) nicht funktioniert, ist die Wahrscheinlichkeit extrem hoch, dass andere ältere ActiveX-Steuerelemente von Microsoft mit Datum- oder Kalenderfunktionen ebenfalls nicht korrekt auf Windows 7 64bit oder neueren 64-Bit-Office-Versionen funktionieren werden. Der Versuch, solche Controls zu nutzen, führt meist in eine Sackgasse und vergeudet wertvolle Entwicklungszeit. Die einzige Ausnahme wären *neue* ActiveX Controls, die *spezifisch* für 64-Bit-Architekturen entwickelt wurden (siehe "Kommerzielle ActiveX-Steuerelemente" unter Alternative 2), aber diese sind selten "eingebaut" oder kostenlos.
Fazit und Empfehlung: Welche Alternative ist die Richtige für Sie?
Das Problem des nicht verfügbaren DateTimePicker-Controls (mscomct2.ocx) unter Windows 7 64bit und in 64-Bit-Office-Umgebungen ist eine Realität, mit der sich Excel-VBA-Entwickler auseinandersetzen müssen. Glücklicherweise gibt es praxistaugliche Wege, diese Hürde zu überwinden.
- Für maximale Kontrolle, Portabilität und Unabhängigkeit von externen Bibliotheken ist der selbstgebaute Kalender in einem UserForm die "Königslösung". Er erfordert zwar den größten initialen Aufwand, zahlt sich aber langfristig aus und ist die zukunftssicherste Wahl.
- Wenn Sie eine schnelle, professionelle Lösung ohne eigenen Programmieraufwand suchen und bereit sind, dafür zu zahlen und eine externe Abhängigkeit einzugehen, sind Drittanbieter-Add-Ins eine gute Wahl.
- Für einfache Anwendungen, bei denen die Anzahl der Datumseingaben gering ist und die Benutzer geschult sind, kann die manuelle Eingabe mit Datenvalidierung eine akzeptable und ressourcenschonende Lösung sein.
Vermeiden Sie es, Zeit mit der Suche nach anderen älteren Microsoft ActiveX-Steuerelementen zu verschwenden, da diese in der Regel unter denselben Kompatibilitätsproblemen leiden. Die Zukunft Ihrer Excel-Anwendungen liegt in robusten, eigenständigen Lösungen oder modernen, plattformunabhängigen Ansätzen. Wählen Sie die Alternative, die am besten zu Ihren Anforderungen und Ihrem Know-how passt, und bringen Sie Ihre Excel-Projekte wieder zum Laufen!