Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Datensätze filtern per Button

Begonnen von Nicolo#22, April 02, 2026, 17:30:51

⏪ vorheriges - nächstes ⏩

Nicolo#22

Hallo zusammen.
Im Netz fand ich Ansätze zur Lösung meiner Idee, aber die gehen alle von anderen Voraussetzungen aus.
Ich habe:
Einige im Aufbau gleiche Endlos Formulare, die Daten aus einer Abfrage beziehen, zb. von 01.01.2022 bis 31.12.2022
Weitere FRM die dann die Daten aus einer weiteren Qry beziehen, immer von Jan bis Dez.
Jetzt wollte ich ein Extra FRM bauen, mit Jahres Button.
Das heisst für jedes Jahr einen eigenen Button.
Die Daten kommen aus einer Abfrage die alle Jahre beinhaltet.
-
Damit kann ich alles über ein einziges FRM machen und brauchen nicht für jedes Jahr
 immer ein eigenes FRM mit Qry.

Im Netz finde ich Beispiele, aber die setzen 2 zusätzliche Textfelder voraus.
Kann ich nicht einfach den Button mit einem VBA Code bestücken der mir sofort die
DS liefert von 1.1 bis 31.12.?
Ich blicke da nicht wirklich durch.
Der Weg über jeweils einzelne FRM ist doch zu umständlich oder?

werner budde

#1
Meine Empfehlung:

Deklariere im Deklarationsteil Deines Formularcodes eine Variable:
Dim lng_Kal_Jahr as long
  • Lege eine neue Hilfstabelle mit einem Feld [Kalenderjahr] an, einmalig zu befüllen mit den für Dich relevanten Kalenderjahren 19xx bis 20xx.
  • Diese Hilfstabelle soll dann die Datenherkunft eines einfachen Kombi- oder Listenfeldes in Deinem Formular sein
  • Die eigentliche Abfrage zu Deinem Formular in der SQL-Ansicht ungefähr so aufbauen:
      "Select DeineFelder from DeineTabelle Where year(DeinDatumsfeld) = " & lng_Kal_Jahr & " ggf. noch order by .. etc."
  • Bei Auswahl (AfterUpdate) eines Eintrages im Kalenderjahr-Kombifeld 2 Dinge:
lng_Kal_Jahr = me.Kombifeld
 me.requery


Nicht getestet, aber der Ansatz müsste so gehen.
Gruß Werner

jens05

Hallo,
für deinen Buttonwunsch, und einem entsprechenden Formularfilter ginge folgendesPrivate Sub FilterNachJahr(ByVal lngJahr As Long)

    Dim dtVon As Date
    Dim dtBis As Date

    dtVon = DateSerial(lngJahr, 1, 1)
    dtBis = DateSerial(lngJahr, 12, 31)

    Me.Filter = "[Buchungsdatum] BETWEEN #" & _
                Format(dtVon, "mm\/dd\/yyyy") & "# AND #" & _
                Format(dtBis, "mm\/dd\/yyyy") & "#"

    Me.FilterOn = True

End Sub
Jetzt könntest du Buttons benutzen die die Prozedur aufrufen Private Sub cmd2024_Click()
    FilterNachJahr 2024
End Sub
Die Verwendung von Where year(DeinDatumsfeld) = " & lng_Kal_Jahr & " ggf. noch order by .. etc."würde eine Indexnutzung des Feldes verhindern ;-)
mfg
jens05

Knobbi38

#3
Hallo,

das funktioniert aber nur, wenn die Felder mit Sicherheit keinen Zeitabteil enthalten, was ja vorkommen kann. Deshalb vielleicht eine leicht modifizierte Variante (Pseudocode):
    dim strCriteria as String

    dtVon = DateSerial(lngJahr, 1, 1)
    dtBis = DateSerial(lngJahr + 1 , 1, 1)

    strCriteria = "Buchungsdatum >= " & format$(dtVon, "\#mm\/dd\/yyyy\#" ) _
                &  " AND " _
                & "Buchungsdatum < "  & format$(dtBis , "\#mm\/dd\/yyyy\#" )"
    Me.Filter = strCriteria
Damit wird dann das ganze Jahr auf jedenfall berücksichtigt.

Siehe auch https://codekabinett.com/rdumps.php?Lang=1&targetDoc=datum-uhrzeit-datentyp-vba-access

Warum eigentlich keine Kombobox?

Knobbi38


jens05

Zitat von: Knobbi38 am Heute um 14:42:57Damit wird dann das ganze Jahr auf jedenfall berücksichtigt.
damit hast du natürlich recht, bin vor Jahrzehnten auch darauf reingefallen, und habe mich gewundert warum DS fehlen. Danke fürs erweitern.

ZitatWarum eigentlich keine Kombobox?
Zwischenzeitlich ist dem User jeder Klick zuviel, da wird sogar durchgezählt wieviel klicks jemand machen muss um ans Ziel zu kommen.

Sicherlich, ein Kombifeld, oder ein einfaches Textfeld macht dem Ersteller der DB das Leben einfacher  ;)
mfg
jens05