Supportnet / Forum / Tabellenkalkulation
Userform Textfeld Datum
Frage
Hallo,
ich habe eine Userform mit Textfeld erstellt, das dann als Autofilter für Spalte "A" verwendet wird.
Wenn ich dann ein Datum in das Listenfeld eingebe, wird es als solches nicht erkannt. Die Spalte wird falsch sortiert.
Ist es möglich mit einem Datum durch ein Listenfeld Spalten zu sortieren?
Gruß
fedjo
Selection.AutoFilter Field:=1, Criteria1:=TextBox1.Value
Antwort 1 von CaroS
Hi fedjo,
versuch doch mal eine explizite Typumwandlung, die Textbox liefert ja einen String.
Selection.AutoFilter Field:=1, Criteria1:=CDate(TextBox1.Value)
Gruß,
CaroS
versuch doch mal eine explizite Typumwandlung, die Textbox liefert ja einen String.
Selection.AutoFilter Field:=1, Criteria1:=CDate(TextBox1.Value)
Gruß,
CaroS
Antwort 2 von fedjo
Hallo CaroS,
danke für die Antwort, es funktioniert aber leider nicht.
Vielleicht liegt es daran, das die Zellen als Datum "29.05.06" formatiet sind.
Gruß
fedjo
danke für die Antwort, es funktioniert aber leider nicht.
Vielleicht liegt es daran, das die Zellen als Datum "29.05.06" formatiet sind.
Gruß
fedjo
Antwort 3 von Primut
Hi Fedjo,
was funktioniert denn nicht? Wie lauten die Fehlermeldungen?
Von der Sache her hat CaroS recht, bei mir läuft´s jedenfalls.
Die Zellformatierung ist egal, es reicht, wenn es als Datum erkannt wird.
Wichtig ist bloß: du darfst in der Textbox beim der Datum Eingabe das Jahr nicht ausschreiben, dort ist also dieses Format
Gruß Primut
was funktioniert denn nicht? Wie lauten die Fehlermeldungen?
Von der Sache her hat CaroS recht, bei mir läuft´s jedenfalls.
Die Zellformatierung ist egal, es reicht, wenn es als Datum erkannt wird.
Wichtig ist bloß: du darfst in der Textbox beim der Datum Eingabe das Jahr nicht ausschreiben, dort ist also dieses Format
Zitat:
29.05.06
richtig.29.05.06
Gruß Primut
Antwort 4 von fedjo
Hi Primut ,
der Autofilter zeigt bei der Auswertung nur leere Zeilen an.
Ich habe es mal ohne Texfeld versucht, also ein Makro aufgezeichnet, das ein Datum mit dem Autofilter sucht. Nach dem Start des Makros wurde aber auch hier nur leere Zeilen angezeigt.
Gruß
fedjo
der Autofilter zeigt bei der Auswertung nur leere Zeilen an.
Ich habe es mal ohne Texfeld versucht, also ein Makro aufgezeichnet, das ein Datum mit dem Autofilter sucht. Nach dem Start des Makros wurde aber auch hier nur leere Zeilen angezeigt.
Gruß
fedjo
Antwort 5 von Primut
Hi nochmal,
Sorry, stimmt doch nicht, da hab ich denFilter etwas überschätzt! Also macht das erwähnte Format gleichzeitig in Textbox und in den Zellen am meisten Sinn. Im Ernstfall kannst du ja noch eine Abfrage einbauen, ob das Datum richtig eingegeben wurde oder eine Umwandlung vornehmen.....
Gruß Primut
Zitat:
Die Zellformatierung ist egal, es reicht, wenn es als Datum erkannt wird
Die Zellformatierung ist egal, es reicht, wenn es als Datum erkannt wird
Sorry, stimmt doch nicht, da hab ich denFilter etwas überschätzt! Also macht das erwähnte Format gleichzeitig in Textbox und in den Zellen am meisten Sinn. Im Ernstfall kannst du ja noch eine Abfrage einbauen, ob das Datum richtig eingegeben wurde oder eine Umwandlung vornehmen.....
Gruß Primut
Antwort 6 von Primut
Hi Fedjo,
scheint wohl ein generelles Filter / VBA Problem zu sein.
Erst lief es bei mir, jetzt aber auch nicht mehr .
Werd mal nachschauen, weiß aber noch nicht wie schnell....
Gruß Primut
scheint wohl ein generelles Filter / VBA Problem zu sein.
Erst lief es bei mir, jetzt aber auch nicht mehr .
Werd mal nachschauen, weiß aber noch nicht wie schnell....
Gruß Primut
Antwort 7 von schnallgonz
Hallo,
woher kommt den das Datum in Spalte A, vielleicht aus dem Import einer Textdatei o.ä.?
vielleicht hilft:
https://supportnet.de/threads/1326694
gruß
schnallgonz
woher kommt den das Datum in Spalte A, vielleicht aus dem Import einer Textdatei o.ä.?
vielleicht hilft:
https://supportnet.de/threads/1326694
gruß
schnallgonz
Antwort 8 von fedjo
Hallo schnallgonz ,
dake für die Antwort.
Das Datum wird durch ein Makro erzeugt.
Gruß
fedjo
dake für die Antwort.
Das Datum wird durch ein Makro erzeugt.
Gruß
fedjo
Antwort 9 von Primut
Hi,
offensichtlich tatsächlich ein Datum-Format Problem, bei mir hat es nur kurzzeitig in AW3 funktioniert, jetzt nicht mehr, vielleicht auch ein generelles Excel-Problem.
Als Hilfslösung funktioniert bei mir aber zumindest die Sortierung über eine Hilfsspalte, zB. mit B als Hilfsspalte.
Du kopierst einfach alle Daten parallel in die Hilfsspalte und formatierst sie als Zahl ohne Dezimalstellen.
Der Filter muß dann natürlich mit über die Spalte gehen.
Auswahl dann über:
Sorry, das es nur eine Hilfslösung ist, aber vielleicht ausreichend umweiterzuarbeiten.
Gruß Primut
offensichtlich tatsächlich ein Datum-Format Problem, bei mir hat es nur kurzzeitig in AW3 funktioniert, jetzt nicht mehr, vielleicht auch ein generelles Excel-Problem.
Als Hilfslösung funktioniert bei mir aber zumindest die Sortierung über eine Hilfsspalte, zB. mit B als Hilfsspalte.
Du kopierst einfach alle Daten parallel in die Hilfsspalte und formatierst sie als Zahl ohne Dezimalstellen.
Der Filter muß dann natürlich mit über die Spalte gehen.
Auswahl dann über:
Selection.AutoFilter Field:=2, Criteria1:=CDec(CDate(TextBox1.Value))
Field:=2
steht hier für Spalte B. Die Sortierung funktioniert hier also über die Hilfsspalte im Zahlenformat, die sich aber ohne Probleme ausblenden läßt. Das Formatproblem also durch Umformatierung ins Zahlenformat umgangen.Sorry, das es nur eine Hilfslösung ist, aber vielleicht ausreichend umweiterzuarbeiten.
Gruß Primut
Antwort 10 von schnallgonz
Hi,
ich habe mal im meinem Fundus gewühlt, Ergebnis:
mit dem Autofilter scheint ein Datumfilter nicht zu funzen.
Ich habe entweder mit der Filterkrücke aus Excel4-Zeiten gearbeitet oder mit Hilfsspalten, wie primut vorgeschlagen hat.
Alternative wären je nach Auswertungsumfang mehrere Hilfsspalten mit TAG(A2), MONAT(A2) und JAHR(A2)
Die kann man dann gut in einer Pivot einsetzen.
gruß
schnallgonz
ich habe mal im meinem Fundus gewühlt, Ergebnis:
mit dem Autofilter scheint ein Datumfilter nicht zu funzen.
Ich habe entweder mit der Filterkrücke aus Excel4-Zeiten gearbeitet oder mit Hilfsspalten, wie primut vorgeschlagen hat.
Alternative wären je nach Auswertungsumfang mehrere Hilfsspalten mit TAG(A2), MONAT(A2) und JAHR(A2)
Die kann man dann gut in einer Pivot einsetzen.
gruß
schnallgonz
Antwort 11 von schnallgonz
Nachtrag:
im von mir in Antwort7 zitierten Thread hat die Filterung doch funktioniert
so funzt es bei mir mit einer Textbox:
gruß
schnallgonz
im von mir in Antwort7 zitierten Thread hat die Filterung doch funktioniert
so funzt es bei mir mit einer Textbox:
Private Sub CommandButton1_Click()
Dim moin As Date
moin = TextBox1.Value
Selection.AutoFilter Field:=1, Criteria1:=moin
End Sub
gruß
schnallgonz
Antwort 12 von JoeKe
Hallo zusammen,
so wie ich das sehe ist die Formatierung das Problem.
Solange der Bereich der gefiltert werden soll im Format "dd.mm.yy" ist wird es nicht funktionieren. Da sowohl "moin as Date" als auch "CDate" ein Format "dd.mm.yyyy" liefern.
Wird der zufilternde Bereich dahin umformatiert, kann in die Textbox jeder Ausdruck, der als numerischer Wert interpretiert werden kann, eingegeben werden.
MfG
JöKe
so wie ich das sehe ist die Formatierung das Problem.
Solange der Bereich der gefiltert werden soll im Format "dd.mm.yy" ist wird es nicht funktionieren. Da sowohl "moin as Date" als auch "CDate" ein Format "dd.mm.yyyy" liefern.
Wird der zufilternde Bereich dahin umformatiert, kann in die Textbox jeder Ausdruck, der als numerischer Wert interpretiert werden kann, eingegeben werden.
MfG
JöKe
Antwort 13 von Primut
@Jöke,
ja genau, das war´s! THX!
Werden mir wohl immer ein kleines Rätsel bleiben die Datum-Formate, klar - haben ja auch nix mit Logik und Mathe zu tun. ;-))
Beste Grüße
Primut
ja genau, das war´s! THX!
Werden mir wohl immer ein kleines Rätsel bleiben die Datum-Formate, klar - haben ja auch nix mit Logik und Mathe zu tun. ;-))
Beste Grüße
Primut
Antwort 14 von Flupo
Hast du schonmal probiert, mit den Werten zu filtern, die Excel intern für Daten und Uhrzeiten verwendet?
Anstatt 1.5.2006 musst du dann 38718 (Anzahl der Tage seit dem 1.1.1900) eingeben.
Falls du Uhrzeiten auch brauchst, sind das dann die Nachkommastellen. 12:00 Uhr mittags entspricht 0,5
Gruß Flupo
Anstatt 1.5.2006 musst du dann 38718 (Anzahl der Tage seit dem 1.1.1900) eingeben.
Falls du Uhrzeiten auch brauchst, sind das dann die Nachkommastellen. 12:00 Uhr mittags entspricht 0,5
Gruß Flupo
Antwort 15 von Flupo
OOPS! Zu spät.
Antwort 16 von Primut
@ Fedjo,
du kannst ja, wenn deine Daten durch ein Makro bereitgestellt werden, einfach zur Sicherheit noch mit einbauen
Dann sollte es funktionieren.
Gruß Primut
du kannst ja, wenn deine Daten durch ein Makro bereitgestellt werden, einfach zur Sicherheit noch mit einbauen
Columns("A:A").NumberFormat = "m/d/yyyy"
Dann sollte es funktionieren.
Gruß Primut
Antwort 17 von fedjo
Hallo zusammen,
ich möchte euch alle noch mal für die Unterstützung danken.
Habe vieles getestet, aber mit keiner der Varianten hatte ich Erfolg.
@Primut, @schnallgonz
Über eine zusätzliche Spalte (Hilfsspalte) möchte ich den Autofilter nicht starten.
@ Flupo Auch über Werte
Gruß
fedjo
ich möchte euch alle noch mal für die Unterstützung danken.
Habe vieles getestet, aber mit keiner der Varianten hatte ich Erfolg.
@Primut, @schnallgonz
Über eine zusätzliche Spalte (Hilfsspalte) möchte ich den Autofilter nicht starten.
@ Flupo Auch über Werte
Zitat:
(1.5.2006 musst du dann 38718 )
ein Datum zu filtern ist für mich auch nur eine Ersatzlösung.(1.5.2006 musst du dann 38718 )
Gruß
fedjo
Antwort 18 von JoeKe
Hallo fedjo,
wenn du die zufilternden Zellen in "dd.mm.yyyy" umformatierst müsste es doch gehen.
MfG
JöKe
wenn du die zufilternden Zellen in "dd.mm.yyyy" umformatierst müsste es doch gehen.
MfG
JöKe
Antwort 19 von fedjo
Hallo JöKe ,
auch mit dem Format (25.05.2006) funktioniert es leider auch nicht.
Danke
Gruß
fedjo
auch mit dem Format (25.05.2006) funktioniert es leider auch nicht.
Danke
Gruß
fedjo
Antwort 20 von JoeKe
Hallo fedjo,
nachdem das alles nicht hilfreich war, vermute ich das in den Zellen nicht die reinen Datumswerte stehen.
Wenn du vor dem Filtern den Bereich kopierst und als Wert wieder einfügst, könnte das helfen.
MfG
JöKe
nachdem das alles nicht hilfreich war, vermute ich das in den Zellen nicht die reinen Datumswerte stehen.
Wenn du vor dem Filtern den Bereich kopierst und als Wert wieder einfügst, könnte das helfen.
MfG
JöKe
Antwort 21 von Primut
Hi Fedjo,
nanu, und ich dachte, ich hätte dein Problem recht gut nachvollziehen können.
Du findest das Format unter benutzerdefiniert Typ
Erstaunlicherweise sieht die Makro-Formatierung wieder anders aus, hat aber bei mir funktioniert.
Ansonsten wüßte ich auch nix mehr, dann müßtest du vielleicht Besscheid sagen, wie du die Daten per Makro generierst (Ich gehe davon aus, es sind wirkliche Datum-Angaben und nicht nur so formatiert.)
Gruß Primut
nanu, und ich dachte, ich hätte dein Problem recht gut nachvollziehen können.
Zitat:
Format (25.05.2006)
ist nicht wirklich ein Format sondern nur der Ausdruck eines Formates! Beispielsweise geht daraus nicht hervor, ob die Tage, hier am Anfang, im einstelligen Bereich mit oder ohne 0 dargestellt werden.Format (25.05.2006)
Du findest das Format unter benutzerdefiniert Typ
TT.MM.JJJJ
oder wie in AW16 per Makro formatieren. Erstaunlicherweise sieht die Makro-Formatierung wieder anders aus, hat aber bei mir funktioniert.
Ansonsten wüßte ich auch nix mehr, dann müßtest du vielleicht Besscheid sagen, wie du die Daten per Makro generierst (Ich gehe davon aus, es sind wirkliche Datum-Angaben und nicht nur so formatiert.)
Gruß Primut
Antwort 22 von fedjo
Hi JöKe,
ein Versuch wars wert, aber leider ohne Erfolg.
MfG
fedjo
ein Versuch wars wert, aber leider ohne Erfolg.
MfG
fedjo
Antwort 23 von fedjo
Hallo JöKe,
ein Versuch wars wert, aber leider ohne Erfolg.
MfG
fedjo
ein Versuch wars wert, aber leider ohne Erfolg.
MfG
fedjo
Antwort 24 von schnallgonz
Hallo fedjo,
meine Antwort 11 überlesen?
Ich habe einen Dialog gebastelt, in einer Textbox ein Datum eingegeben und es funzt.
Hauptsache: Datumformat mit JJJJ
Dann ist sogar Eingabe von z.B. 24.05.06 in der Textbox möglich.
gruß
schnallgonz
meine Antwort 11 überlesen?
Ich habe einen Dialog gebastelt, in einer Textbox ein Datum eingegeben und es funzt.
Hauptsache: Datumformat mit JJJJ
Dann ist sogar Eingabe von z.B. 24.05.06 in der Textbox möglich.
gruß
schnallgonz
Antwort 25 von fedjo
Guten Morgen zusammen,
@Primut Die Zellen jetzt mit dem Datum (TT.MM.JJJJ ) formatiert. Durch das Makro wird das Datum so eingefügt:
[A:A].SpecialCells(xlBlanks).Cells(1).Select
ActiveCell.Value = Date
@schnallgonz Ich habe wohl deine Antwort 11 bei den vielen Vorschlägen übersehen.
Deine Prozedur
fuktioniert nach deiner Beschreibung susper.
MfG
fedjo
@Primut Die Zellen jetzt mit dem Datum (TT.MM.JJJJ ) formatiert. Durch das Makro wird das Datum so eingefügt:
[A:A].SpecialCells(xlBlanks).Cells(1).Select
ActiveCell.Value = Date
@schnallgonz Ich habe wohl deine Antwort 11 bei den vielen Vorschlägen übersehen.
Deine Prozedur
Zitat:
Private Sub CommandButton4_Click()
Dim moin As Date
moin = TextBox1.Value
Selection.AutoFilter Field:=1, Criteria1:=moin
End Sub
Private Sub CommandButton4_Click()
Dim moin As Date
moin = TextBox1.Value
Selection.AutoFilter Field:=1, Criteria1:=moin
End Sub
fuktioniert nach deiner Beschreibung susper.
MfG
fedjo
Antwort 26 von fedjo
Hi schnallgonz ,
ich habe zur UserFrorm Textfeld doch noch eine Frage:
Ist es möglich das, das Texfeld automatisch bei der Datumseingabe das aktuelle Jahr ergänzt.
Gruß
fedjo
ich habe zur UserFrorm Textfeld doch noch eine Frage:
Ist es möglich das, das Texfeld automatisch bei der Datumseingabe das aktuelle Jahr ergänzt.
Gruß
fedjo
Antwort 27 von Gast
Hallo
Gruß Gast
Option Explicit
Private Sub TextBox1_Change()
Static Datum As Date
Debug.Print TextBox1.Text
If Len(TextBox1.Text) < 4 Then Exit Sub
If Len(TextBox1.Text) = 5 And InStr(TextBox1.Text, _
".") = 3 Then TextBox1.Text = TextBox1.Text & _
"." & Format(Now, "yyyy")
On Error GoTo Cdatefehler:
If Len(TextBox1.Text) = 10 And Datum = CDate(TextBox1.Text) Then Exit Sub
If Len(TextBox1.Text) = 10 Then
On Error Resume Next
Datum = CDate(TextBox1.Text)
Debug.Print Datum, "Err="; Err.Number
If Err = 0 Then
On Error GoTo 0
If Val(Left(TextBox1.Text, 2)) < 32 And Val(Left(TextBox1.Text, 2)) > 0 _
And Val(Mid(TextBox1.Text, 4, 2)) < 13 And Val(Mid(TextBox1, 4, 2)) > 0 _
And Right(TextBox1.Text, 4) = Format(Now, "yyyy") _
Then GoTo Cdateok
End If
Cdatefehler:
TextBox1.Text = ""
Err.Clear
Cdateok:
End If
Selection.AutoFilter Field:=1, Criteria1:=Datum
End Sub
Gruß Gast
Antwort 28 von schnallgonz
Hallo,
das kann man so machen:
Das Datum wird dann im Format tt.mm eingegeben.
Soll tt.mm. eingegeben werden, nimm & "." raus.
gruß
schnallgonz
das kann man so machen:
Private Sub CommandButton1_Click()
Dim moin As Date
sdat = TextBox1.Value
moin = sdat & "." & Year(Now)
Selection.AutoFilter Field:=1, Criteria1:=moin
End Sub
Das Datum wird dann im Format tt.mm eingegeben.
Soll tt.mm. eingegeben werden, nimm & "." raus.
gruß
schnallgonz
Antwort 29 von schnallgonz
Hi,
ich habe zu spät aktualisiert...
Gast hat die komfortablere Lösung,
probiere es mal aus.
Vielleicht liefert Gast aber auch noch ein paar Erläuterungen für die, die nicht VBA "sprechen"
gruß
schnallgonz
ich habe zu spät aktualisiert...
Gast hat die komfortablere Lösung,
probiere es mal aus.
Vielleicht liefert Gast aber auch noch ein paar Erläuterungen für die, die nicht VBA "sprechen"
gruß
schnallgonz
Antwort 30 von fedjo
Hallo,
@Gast Dein Cote funktioniert super, genau nach meiner Vorstellung. Danke
@schnallgonz Ich werde die Lösung von "Gast"
benutzen. Danke
MfG
fedjo
@Gast Dein Cote funktioniert super, genau nach meiner Vorstellung. Danke
@schnallgonz Ich werde die Lösung von "Gast"
benutzen. Danke
MfG
fedjo
Antwort 31 von Gast
Hallo
@schnallgonz
Erklärung,:-)Da der Code im TextBox_Change() läuft wird die Routine bei jeder Änderung im Textfeld angesprungen.
Dann erfolgen lediglich noch ein paar Prüfungen,
If Len(TextBox1.Text) < 4 Then Exit Sub
Rem Prüfen, ob 2 Punkte(".")eingegeben wurden
If Len(TextBox1.Text) = 5 And InStr(TextBox1.Text, _
".") = 3 Then TextBox1.Text = TextBox1.Text & _
"." & Format(Now, "yyyy")
Rem Prüfen, ob Datum geändert wurde durch Vergleich mit als Static deklariertem Datum
On Error GoTo Cdatefehler: Rem Fehlerbehandlungsroutine starten
Rem Prüfen, ob Datum geändert wurde
If Len(TextBox1.Text) = 10 And Datum = CDate(TextBox1.Text) Then Exit Sub
If Len(TextBox1.Text) = 10 Then
On Error Resume Next ´Fehlerbehandlungsroutine
Gruß Gast
@schnallgonz
Erklärung,:-)Da der Code im TextBox_Change() läuft wird die Routine bei jeder Änderung im Textfeld angesprungen.
Dann erfolgen lediglich noch ein paar Prüfungen,
Option Explicit
Private Sub TextBox1_Change()
Static Datum As Date
Debug.Print TextBox1.Text
Rem
Prüfen, ob Wenigstens 4 Zeichen eingegeben wurdenIf Len(TextBox1.Text) < 4 Then Exit Sub
Rem Prüfen, ob 2 Punkte(".")eingegeben wurden
If Len(TextBox1.Text) = 5 And InStr(TextBox1.Text, _
".") = 3 Then TextBox1.Text = TextBox1.Text & _
"." & Format(Now, "yyyy")
Rem Prüfen, ob Datum geändert wurde durch Vergleich mit als Static deklariertem Datum
On Error GoTo Cdatefehler: Rem Fehlerbehandlungsroutine starten
Rem Prüfen, ob Datum geändert wurde
If Len(TextBox1.Text) = 10 And Datum = CDate(TextBox1.Text) Then Exit Sub
If Len(TextBox1.Text) = 10 Then
On Error Resume Next ´Fehlerbehandlungsroutine
Datum = CDate(TextBox1.Text)
Debug.Print Datum, "Err="; Err.Number
If Err = 0 Then
On Error GoTo 0 ´
Fehlerbehandlungsroutine
Rem
Prüfen gültige werte für Tag/Monat eingegeben wurden
If Val(Left(TextBox1.Text, 2)) < 32 And Val(Left(TextBox1.Text, 2)) > 0 _
And Val(Mid(TextBox1.Text, 4, 2)) < 13 And Val(Mid(TextBox1, 4, 2)) > 0 _
And Right(TextBox1.Text, 4) = Format(Now, "yyyy") _
Then GoTo Cdateok
End If
Cdatefehler:
Rem
Textbox und error zurücksetzen (löschen)
TextBox1.Text = ""
Err.Clear
Cdateok:
End If
Rem
Das hab´ ich geklaut ;-)
Selection.AutoFilter Field:=1, Criteria1:=Datum
End Sub
Gruß Gast
Antwort 32 von schnallgonz
Salve
@Gast
na also, geht doch, warum nicht gleich so ;-)
Danke, mache ich selbst bei Eigenkreationen, dann weiß ich auch in 1 Jahr noch, was ich mir dabei gedacht habe.
Man ist keine 20 mehr...
gruß
schnallgonz
@Gast
na also, geht doch, warum nicht gleich so ;-)
Danke, mache ich selbst bei Eigenkreationen, dann weiß ich auch in 1 Jahr noch, was ich mir dabei gedacht habe.
Man ist keine 20 mehr...
gruß
schnallgonz