Supportnet Computer
Planet of Tech

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

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

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
Zitat:
29.05.06
richtig.

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

Antwort 5 von Primut

Hi nochmal,

Zitat:
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

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

Antwort 8 von fedjo

Hallo schnallgonz ,
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:
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

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:

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

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

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

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

 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
Zitat:
(1.5.2006 musst du dann 38718 )
ein Datum zu filtern ist für mich auch nur eine Ersatzlösung.



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

Antwort 19 von fedjo

Hallo JöKe ,
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

Antwort 21 von Primut

Hi Fedjo,

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.
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

Antwort 23 von fedjo

Hallo JöKe,
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

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
Zitat:
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

Antwort 27 von Gast

Hallo


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:

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

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

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,

Option Explicit

Private Sub TextBox1_Change()
Static Datum As Date
Debug.Print TextBox1.Text
Rem 
Prüfen, ob Wenigstens 4 Zeichen eingegeben wurden
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

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

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: