Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Mehrfachauswahl bei Listenfeld -> Werte in Datum umrechnen

Begonnen von MarkusR, August 19, 2013, 16:19:48

⏪ vorheriges - nächstes ⏩

MarkusR

Hallo zusammen,

ich mal wieder...  ;D

Ich versuche gerade aus einem Listenfeld mit Mehrfachauswahl einen Filter zu generieren. Leider schaffe ich es nicht, dass die Werte in gültige Datums-Formate umgewandelt werden. Bisher habe ich folgenden Code:

Dim x As String
Dim var As Variant
Dim txtFilter As String

For Each var In Me!lstMonate.ItemsSelected
    If txtFilter <> "" Then
           txtFilter = txtFilter & " Or "
    End If
    x = Me!lstMonate.Column(0)
    txtFilter = txtFilter & "(bstLT >=" & Format(var, "\#" & x & "\/01\/" & Me!cmbJahr & "\#") & " AND bstLT <=" & Format(var, "\#" & x & "\/" & Day(DateSerial(Me!cmbJahr, Me!lstMonate.Column(0) + 1, 0)) & "\/" & Me!cmbJahr & "\#") & ")"
Next
Me!frmUmsatzUfo.Form!Filter1 = txtFilter


Im Listenfeld steht in der ersten Spalte der Monat im Zahlenformat (01, 02, 03 usw.). Wenn ich nur den Januar auswähle, kommt aus das gewünschte Ergebnis "(bstLT >=#01/01/2013# AND bstLT <=#01/31/2013#)".  Wähle ich mehrere Monate aus, kommt dann ein sehr komisches Ergebnis "(bstLT >=#02/01/2013# AND bstLT <=#02/28/2013#) Or (bstLT >=#02/01/2113# AND bstLT <=#02/28/2113#)". Markiert waren jetzt eigentlich Januar und Februar. Aus dem Januar macht jetzt Februar und aus Februar macht er Februar 2113.

Hat jemand eine Ahnung, was ich da falsch mache?

Vielen Dank im Voraus und beste Grüße
Markus

DF6GL

#1
Hallo,

ja, schon..  eigentlich alles  8)


falsche Verwendung unpassender Variablen/Eigenschaften

Mögliche Fehlberechnung eines Datums aus der Monatszahl  (Monat 12 + 1 ??) 


Schau mal in die VBA-Hilfe zu "ItemsSelected"  und zur Zusammenstellung der selektierten Werte zu einer Liste.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

MarkusR

Guten Morgen,

erstmal danke für Deine Antwort...zum Thema:

Ich denke mal txtFilter als String zu deklarieren war in Ordnung und habe ich jetzt so gelassen. Var als Variant steht auch so in der Access Hilfe. X habe ich dann jetzt weg gelassen, da man sich die Daten aus der gebundenen Spalte (wie ich jetzt gelernt habe  ;)) mit .ItemData(var) holt.
Dann habe ich mir in der Hilfe noch mal DateSerial angesehen und das war eigentlich auch nicht so verkehrt. Nach ein bisschen rumprobieren kam mir dann die Idee, mir nicht nur den Tag, sondern das komplette Datum mit DateSerial zu holen und das dann ist nötige Format umzuwandeln.

Das ganze funktioniert und sieht jetzt wie folgt aus:

Dim var As Variant
Dim txtFilter As String

For Each var In Me!lstMonate.ItemsSelected
    If txtFilter <> "" Then
        txtFilter = txtFilter & " Or "
    End If
    txtFilter = txtFilter & "(bstLT >=" & Format(DateSerial(Me!cmbJahr, Me!lstMonate.ItemData(var), 1), "\#mm\/dd\/yyyy\#") & " AND bstLT <=" & Format(DateSerial(Me!cmbJahr, Me!lstMonate.ItemData(var) + 1, 0), "\#mm\/dd\/yyyy\#") & ")"
    Next
Me!frmUmsatzUfo.Form!Filter1 = txtFilter


Ich hätt zwar eigentlich auch selber drauf kommen müssen, aber manchmal muss man wohl irgendwo drauf gedeut werden  ;D

Also, mal wieder vielen Dank für Deine Hilfe!

Beste Grüße
Markus