Excel VBA Text zu Datum konvertieren?

12/13/2016 10:25 merquart#1
Hey,
hoffe mal bin hier mehr oder weniger im richtigen Bereich.

Folgendes Problem: In Excel werden über ein Formular verschiedene Werte eingetragen, die letztlich in einer neuen Zeile landen. Unter anderem eine Frist. Ist diese Frist kleiner, als das heutige Datum, so ändert sich die Farbe der Zeile.
Nun ist das Problem, dass die Farbe der Zeile sich nur ändert, wenn das Datum der Frist per Hand eingetragen wird. Wird das Datum über das Formular eingetragen, passiert gar nichts. Die komplette Spalte, in die das Datum eingetragen wird, ist als Datum formatiert.

Im Formular landet das Fristablauf Datum in einer TextBox.
[Only registered and activated users can see links. Click Here To Register...]

Danach werden die Einträge in die jeweiligen Zellen übernommen.
Code:
 Sheets("XXX 2016").Cells(erste_freie_Zeile, 15) = Fristablauf_Input.Text
Wie schaffe ich es nun, dass auch über das Formular das Fristablauf Datum als solches erkannt wird? Leider so gut wie gar keinen Plan davon, denke aber mal, dass es einfach als Text angesehen wird?

EDIT:
Okay, das Problem liegt offenbar an Excel selbst?

In Zelle XED5 befindet sich dasselbe Datum wie in Zelle O5. Soweit so gut, wird alles angezeigt.
In Zelle A5 ist nun eine kleine Übersicht, die einfach verschiedene Abkürzungen anzeigen soll, je nachdem was zutrifft.
Code:
=WENN(S5>0;"erl.";WENN(U5>0;"Netzt.";WENN(XED5<HEUTE();"Fristabl.";WENN(J5=1;"Mangel 1";WENN(J5=2;"Mangel 2";WENN(J5=3;"Mangel 3";" "))))))
In Zelle O5 wird das Datum angezeigt, dies wird in die ebenfalls als Datum formatierte Spalte XED übernommen. Doch auch, wenn XED5<HEUTE() ist, wird "Fristabl." nicht ausgegeben. Erst, wenn ich das Datum in O5 per Hand eingebe, dann klappt alles ohne Probleme, obwohl rein optisch keine Änderungen in O5 oder XED5 stattfinden.

Ich hoffe man versteht, was ich meine.. haha
12/13/2016 13:19 Ravenstorm#2
Willst du prüfen ob das Datum ein valides Datum ist bzw. mit dem Datum arbeiten?

Dann:
Code:
CDate(#DateString#)
Scheinbar willst du das Event triggern... das geht in VBA nicht.. du kannst aber den eventhandler aufrufen
Dann :
Code:
Private Sub worksheet_AfterUpdate()
    //Do Something
End Sub

Private Sub button_Click()
    worksheet_AfterUpdate()
End Sub
sowas kann funktionieren...
Ansonsten habe ich nicht wirklich verstanden was du mit dem Datum möchtest.
12/13/2016 14:01 merquart#3
Quote:
Originally Posted by Nana Osaki View Post
Willst du prüfen ob das Datum ein valides Datum ist bzw. mit dem Datum arbeiten?

Dann:
Code:
CDate(#DateString#)
Scheinbar willst du das Event triggern... das geht in VBA nicht.. du kannst aber den eventhandler aufrufen
Dann :
Code:
Private Sub worksheet_AfterUpdate()
    //Do Something
End Sub

Private Sub button_Click()
    worksheet_AfterUpdate()
End Sub
sowas kann funktionieren...
Ansonsten habe ich nicht wirklich verstanden was du mit dem Datum möchtest.
Ich mache dir gegen 15 Uhr mal eine Liste.

Als Beispiel:
In Zelle A1 ist eine Wenn-Formel. Wenn B1<HEUTE() - Also wenn der Inhalt von B1 kleiner als das heutige Datum ist - soll ein "Kleiner" in A1 angezeigt werden, ansonsten "Größer".

Nun gebe ich in B1 per Hand den 12.12.2016 ein, daraufhin erscheint in Zelle A1 ein "Kleiner". Lasse ich das Datum jedoch über VBA in Zelle B1 eingeben, so erscheint in A1 gar nichts.
In B1 steht zwar das Datum, doch die Wenn-Formel auf Zelle A1 tut nichts, sofern B1 nicht per Hand eingetippt wurde.

Ich weiß nicht woran es liegen könnte.
12/13/2016 14:22 Ravenstorm#4
Quote:
Originally Posted by YSLPlug View Post
Ich mache dir gegen 15 Uhr mal eine Liste.

Als Beispiel:
In Zelle A1 ist eine Wenn-Formel. Wenn B1<HEUTE() - Also wenn der Inhalt von B1 kleiner als das heutige Datum ist - soll ein "Kleiner" in A1 angezeigt werden, ansonsten "Größer".

Nun gebe ich in B1 per Hand den 12.12.2016 ein, daraufhin erscheint in Zelle A1 ein "Kleiner". Lasse ich das Datum jedoch über VBA in Zelle B1 eingeben, so erscheint in A1 gar nichts.
In B1 steht zwar das Datum, doch die Wenn-Formel auf Zelle A1 tut nichts, sofern B1 nicht per Hand eingetippt wurde.

Ich weiß nicht woran es liegen könnte.
Jetzt verstehe ich auch was du meinst.

Probiere doch mal die Funktionen händisch ausführen zu lassen.
Zelle A1 merkt scheinbar nicht, dass B1 verändert worden ist. Das OnChange wird nicht triggered.

Das hier könnte deine Lösung sein. Die Funktion benutze ich ebenfalls um Cell-Functions neu zu laden:
[Only registered and activated users can see links. Click Here To Register...]
12/13/2016 15:17 merquart#5
Quote:
Originally Posted by Nana Osaki View Post
Jetzt verstehe ich auch was du meinst.

Probiere doch mal die Funktionen händisch ausführen zu lassen.
Zelle A1 merkt scheinbar nicht, dass B1 verändert worden ist. Das OnChange wird nicht triggered.

Das hier könnte deine Lösung sein. Die Funktion benutze ich ebenfalls um Cell-Functions neu zu laden:
[Only registered and activated users can see links. Click Here To Register...]
Probiert, doch daran liegt es wohl echt nicht. Das Datum wird einfach nicht als solches erkannt. Wie gesagt, kenne mich leider auch kaum aus.
Im Anhang befindet sich ein kleines Beispiel.




Edit:
Quote:
Originally Posted by Nana Osaki View Post
Willst du prüfen ob das Datum ein valides Datum ist bzw. mit dem Datum arbeiten?

Dann:
Code:
CDate(#DateString#)

Glaube, ich bin dumm. Das hat schon gereicht.

Ging nicht:
Code:
Fristablauf_Input = CDate(Fristablauf_Input)
 Sheets("MK 2016").Cells(4, 3) = Fristablauf_Input
Ging:
Code:
Fristablauf_Input_neu = CDate(Fristablauf_Input)
 Sheets("MK 2016").Cells(4, 3) = Fristablauf_Input_neu
Ging auch:
Code:
 Sheets("MK 2016").Cells(4, 3) = CDate(Fristablauf_Input)

Anhang aus Gründen der Peinlichkeit wieder gelöscht... :o :o :o
12/13/2016 15:58 Ravenstorm#6
Quote:
Originally Posted by YSLPlug View Post
Probiert, doch daran liegt es wohl echt nicht. Das Datum wird einfach nicht als solches erkannt. Wie gesagt, kenne mich leider auch kaum aus.
Im Anhang befindet sich ein kleines Beispiel.




Edit:



Glaube, ich bin dumm. Das hat schon gereicht.

Ging nicht:
Code:
Fristablauf_Input = CDate(Fristablauf_Input)
 Sheets("MK 2016").Cells(4, 3) = Fristablauf_Input
Ging:
Code:
Fristablauf_Input_neu = CDate(Fristablauf_Input)
 Sheets("MK 2016").Cells(4, 3) = Fristablauf_Input_neu
Ging auch:
Code:
 Sheets("MK 2016").Cells(4, 3) = CDate(Fristablauf_Input)

Anhang aus Gründen der Peinlichkeit wieder gelöscht... :o :o :o
Scheint als hätte er den anfänglichen Datentypen beibehalten und nicht parsed. Immerhin hast du es jetzt gelöst :)

Ist eigentlich eher verwunderlich, dass er dir da keinen Fehler geworfen hat (Weder in der Zelle noch in der Konsole) :o
12/13/2016 16:41 Devsome#7
#closed by request