Datumsformat aus ComboBox
#1
Hallo.
Ich habe in VBA eine ComboBox erstellt, die mit Datumsangaben aus verschiedenen Bereichen gefüllt wird. Der in der ComboBox gewählte Eintrag wird in die gerade aktive Zelle geschrieben. In der Zielzelle soll das Format TT.MM.JJ (also 05.02.19) sein.

Code:
ComboBox_Datumswahl = Format(ComboBox_Datumswahl, "dd.mm.yy")
zeigt mir in der ComboBox das Datum als TT.MM.JJ an und bewirkt, dass es später auch in der Zielzelle so steht. Das Problem ist, ich bekomme eine Fehlermeldung „Diese Zelle enthält einen Datumswert mit nur zweistelliger Jahreszahl“. Ich müsste also nach jeder Eingabe noch korrigieren, ob 19XX oder 20XX gemeint ist. Wenn ich manuell in eine Zelle mit dem Zahlenformat TT.MM.JJ ein Datum eingebe, habe ich ja trotzdem die vierstellige Jahreszahl. Mit VBA habe ich das aber nicht hinbekommen.

In der ComboBox darf meinetwegen das Datum auch als TT.MM.JJJJ angezeigt werden, in der Zielzelle muss aber TT.MM.JJ stehen.

Hat jemand einen Tipp?
Top
#2
Hallo,

das Wichtigste fehlt: Wie erfolgt der Übertrag des Datums von der ComboBox in die Zelle?

Gruß Uwe
Top
#3
Hi

Zitat:Ich habe in VBA eine ComboBox erstellt, die mit Datumsangaben aus verschiedenen Bereichen gefüllt wird.
In welcher Form liegen den die Datumsangaben in den Bereichen vor.
Als Datum(Wert) oder nur als Text in der Form "02.03.19"

Wenn es als Datum(02.03.2019) vorliegt, übernimm es auch in der Form in die Combobox. Formatierte die Zielzelle in der es dann ausgeben wird als "TT.MM.JJ"

Liegt es als Text vor und soll in ein Datum(Wert) umgewandelt werden, musst du angeben welches Jahrhundert dir beliebt.
https://www.clever-excel-forum.de/thread-18841.html

Gruß Elex
Top
#4
Moin.

Die Datumsangaben in den Bereichen ergeben sich aus Formeln, z. B.:
für 1. Januar
Code:
=DATUM($F$4;1;1)
für 31. Januar
Code:
=WENNFEHLER(WENN(MONAT(K34+1)=MONAT(K$5);K34+1;"");"")
Die Formeln sind zwingend erforderlich, da die ganze Kiste nach Eingabe der Jahreszahl in F4 jedes Jahr wieder benutzt werden muss. Datumsformat in den Bereichen ist nur TT.
Das ist im Groben die Jahresübersicht von Andreas Thehos (https://www.youtube.com/watch?v=6Ou1SD6dAkg), nur dass die Formeln etwas abweichen und statt der einen monatlichen Spalte für Feiertage/Ereignisse mehrere Spalten für Orte vorhanden sind.

Übernommen werden die Daten bei Initialisierung der UserForm so:
Code:
Dim UnionRange As Range
   Dim Cell As Range
       Set UnionRange = Union(Range("Ort1_Jan"), Range("Ort1_Feb"), Range("Ort1_Mrz"), Range("Ort1_Apr"), Range("Ort1_Mai"), Range("Ort1_Jun"), Range("Ort1_Jul"), Range("Ort1_Aug"), Range("Ort1_Sep"), Range("Ort1_Okt"), Range("Ort1_Nov"), Range("Ort1_Dez"))
       For Each Cell In UnionRange
           If Not IsEmpty(Cell) Then
               ComboBox_Datumswahl.AddItem Cell.Offset(0, -2).Value
           End If
       Next Cell
       
   ComboBox_Datumswahl = Format(ComboBox_Datumswahl, "dd.mm.yy")
(Das If Not IsEmpty und Offset (0, -2) rührt daher, dass in den Bereichen nur die Zellen mit Eintrag ausgewertet werden sollen und dann jeweils zwei Spalten weiter links das Datum geholt werden soll.)


Übergabe in die aktive Zelle habe ich so zusammengewurschtelt:
Code:
Private Sub Button_Uebernehmen_Click()

    Unload Me
    
    'übernimmt den Ort in die rechte benachbarte Zelle
    If OptionButton_Ort1.Value = True Then ActiveCell.Offset(0, 1).Value = OptionButton_Ort1.Caption
    If OptionButton_Ort2.Value = True Then ActiveCell.Offset(0, 1).Value = OptionButton_Ort2.Caption
    If OptionButton_Ort3.Value = True Then ActiveCell.Offset(0, 1).Value = OptionButton_Ort3.Caption
    If OptionButton_Ort4.Value = True Then ActiveCell.Offset(0, 1).Value = OptionButton_Ort4.Caption
    If OptionButton_OrtSonstige.Value = True Then ActiveCell.Offset(0, 1).Value = OptionButton_OrtSonstige.Caption
    
    'übernimmt das gewählte Datum in die markierte Zelle
    ActiveCell.Value = ComboBox_Datumswahl.Value
    
    'markiert linke benachbarte Zelle, weil erneutes Aufrufen der UserForm durch Anklicken der bereits markierten Zelle nicht funktioniert (SelectionChange benötigt Zellenwechsel)
    ActiveCell.Offset(0, -1).Select

End Sub
(ActiveCell.Offset(0, -1).Select hat seinen Ursprung darin, dass die UserForm immer mit Klick in die gewünschte Zelle aufgerufen wird, was ja bei Linksklick nur mit SelectionChange funktioniert. Wenn man danach z. B. für Korrektur die UserForm nochmal aufrufen will und in dieselbe Zelle klickt, passiert nichts, da ja kein SelectionChange vorliegt. Das erspart sozusagen einmal das Klicken in eine andere Zelle, bevor man wieder die gewünschte Zelle anklickt.)

Ohne „ComboBox_Datumswahl = Format(ComboBox_Datumswahl, "dd.mm.yy")“ wird das Datum als TT.MM.JJJJ in die ComboBox geladen und so in die Zielzellen weitergegeben.
Alle als Zielzellen in Frage kommenden haben das Zahlenformat „14.03.12“, also TT.MM.JJ. Ich habe auch schon verschiedene andere Zahlenformate in den Zielzellen probiert,
aber das Zahlenformat der Zielzellen wird komplett ignoriert, egal was ich dort vorgegeben habe. Händisch in die Zellen eingegebene Werte werden wie gewünscht nach TT.MM.JJ formatiert.
Top
#5
Hallo Henning,

teste es mal so:
ActiveCell.Value = CDate(ComboBox_Datumswahl.Value)
Gruß Uwe
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • Henning M
Top
#6
Funktioniert perfekt!
Vielen Dank, Uwe!
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste