Hallo Forum,
in einem Endlosformular sollen Einträge nach dem Feld [AktDueDat] in einem Datumsbereich gefiltert werden. Der Bereich wird über die ungebundenen Felder [DatumFilterVon] und [DatumFilterBis] definiert:
Private Sub FilterSetzen()
Dim ctl As Control
Dim strFilter As String
Set ctl = Me.ActiveControl
If ctl.Name = "DatumFilterVon" Then
If Len(Me!DatumFilterVon.Text & vbNullString) > 0 Then strFilter = strFilter & " AND AktDueDat between " & Format((Me!DatumFilterVon), Date, "\#yyyy-mm-dd\#") & " and " & Format((Me!DatumFilterBis), Date, "\#yyyy-mm-dd\#")
Else
If Not IsNull(Me!DatumFilterVon.Value) Then strFilter = strFilter & " AND AktDueDat between " & Format((Me!DatumFilterVon), Date, "\#yyyy-mm-dd\#") & " and " & Format((Me!DatumFilterBis), Date, "\#yyyy-mm-dd\#")
End If
strFilter = Mid(strFilter, 6)
Me.Filter = strFilter
Me.FilterOn = True
ctl.SetFocus
ctl.SelStart = Len("" & ctl)
Set ctl = Nothing
End Sub
Der Filter wird nach Aktualisierung des ungebundenen Feldes angeprochen, z.B:
Private Sub DatumFilterVon_AfterUpdate()
Call FilterSetzen
End Sub
Der Filter funktioniert nicht und liefert mir den Laufzeitfehler "Typen unverträglich".
Darüber hinaus wüsste ich in diesem Zusammenhang auch noch nicht, wie der Filter zu setzen ist, wenn erst beide Felder belegt sind bzw. wie eine Prüfung eingestellt werden kann, dass DatumFilterVon kleiner als DatumFilterBis sein muss.
Die gleiche Vorgehensweise möchte ich noch zum Filtern ganzer Zahlen in einem Wertebereich einsetzen.
Vielleicht kann mir da jemand helfen.
Vielen Dank!!!
Hallo,
Löse die Filterung beim Klicken einer Schaltfläche (oder nach Aktualisierung von "DatumFilterBis") aus:
Sub DatumFilterBis_Afterupdate()
Me.Filter = "AktDueDat between " & Format(nz(Me!DatumFilterVon, Date), "\#yyyy-mm-dd\#") & " and " & Format(nz(Me!DatumFilterBis, Date), "\#yyyy-mm-dd\#")
Me.FilterOn = True
End Sub
Hallo und vielen Dank, das klappt,
für das Filtern ganzer Zahlen bekomme ich das so aber nicht hin:
Private Sub DurchfuehrungFilterBis_AfterUpdate()
Me.Filter = "AktPlan between " & Nz(Me!DurchfuehrungVon, ) & " and " & Nz(Me!DurchfuehrungBis, )
Me.FilterOn = True
End Sub
Ich weiss leider nicht, was für value_if_null in diesem Fall anzugeben ist. Wie könnte man dieses Problem lösen?
Beim weiteren "herumtüfteln" mit den Filtern ist folgender Fehler eingetreten:
Wird ein Filter (Feld) so gesetzt, dass keine Einträge vorhanden sind, wird bei Änderung des Feldes dieser Fehler angezeigt:
Laufzeitfehler 2185: Sie können auf die Eigenschaften oder Methoden eines Steuerelementes nur verweisen, wenn das Steuerelement den Fokus hat.
Noch eine Frage am Rande: Kann man den SQL-Abfrage-Generator so einstellen, dass man aus einer Abfrage keine Duplikate angezeigt bekommt? Die ungebunden Felder zum filtern beziehen als Kombifelder ihre Einträge daraus. An bestimmten Stellen will ich zum Filtern nur die vorliegenden Einträge und nicht alle möglichen anbieten.
Vielen Dank im Voraus!!!
Hallo,
zeige Deine Tüfteleien, wie sonst soll man einen Fehler finden ?
ZitatKann man den SQL-Abfrage-Generator so einstellen, dass man aus einer Abfrage keine Duplikate angezeigt bekommt?
Ja, kannst Du in den Eigenschaften direkt einstellen (Keine Duplikate). Was wird denn da zur Auswahl mit den Kombis angeboten ?
Hallo MzKlMu,
welche Information soll ich Dir bieten können, ausser dass ich in den Einstellungen des SQL-Abfrage-Generators gesucht habe, um Duplikate auszublenden.
Auch in den Eigenschaften des Steuerelements habe ich nicht die Möglichkeit gefunden Duplikate auszublenden einzustellen.
Gruss
Hallo,
schreibe zunächst in JEDES Modul am Anfang
Option Explicit
hinzu (falls noch nicht geschehen) und kompiliere die DB im VBA-Editor.
ZitatLaufzeitfehler 2185: Sie können auf die ...
Das passiert, wenn auf die "Text"-Eigenschaft eines Textfeldes zurückgegriffen wird, das Textfeld zu diesem Zeitpunkt aber nicht den Fokus besitzt. Das kommt aber beim aktuellen Code nicht vor.
Private Sub DurchfuehrungFilterBis_AfterUpdate()
Me.Filter = "AktPlan between " & Nz(Me!DurchfuehrungVon,0 ) & " and " & Nz(Me!DurchfuehrungBis, 0
Me.FilterOn = True
End Sub
Was ist "DurchfuehrungFilterBis" ? Das sollte eher "DurchfuehrungBis" (AfterUpdate-Prozedur für das Textfeld "DurchfuehrungBis") lauten.
ZitatKann man den SQL-Abfrage-Generator so einstellen, dass man aus einer Abfrage keine Duplikate angezeigt bekommt?
In den Abfrageeigenschaften gibt es dafür die Einstellungen bei "Keine Duplikate" bzw. "Eindeutige Datensätze"
Hallo DF6GL,
Wertefilter klappt, Danke! Hatte einen kleinen Fehler im Feldnamen, sorry!
Ich verwende mehrere Filter, die zusammen arbeiten sollen. Mit der FliterSetzen()-Routine funktioniert das. Allerdings mit dem beschriebenen Laufzeitfehler.
Mit der Me.Filter-Funktion arbeiten die Filter einzeln. Oder gibt es eine Möglichkeit die zu verknüpfen?
Thema Duplikate: Die Abfrage zeigt eindeutige Datensätze an. In dem Feld, nachdem gefiltert werden soll, können Einträge jedoch mehrfach vorkommen. Entweder ich filtere nach der Datensatzquelle, die schon in die Abfrage eingegangen ist, dann biete ich mehr Einträge an als evtl. in den Feldern vorhanden sind, oder ich biete nur die Einträge an, die über die Abfrage angezeigt wird. Dann muss ich ich ja im Kombinationsfeld des Formulars über das gefiltert wird eine Einstellung zu Duplikaten machen können. Finde ich aber nicht!
Danke und Gruss
Hallo,
ZitatMit der FliterSetzen()-Routine funktioniert das. Allerdings mit dem beschriebenen Laufzeitfehler.
Und nach dieser FilterSetzen()-Routine hatte ich gefragt.
ZitatOder gibt es eine Möglichkeit die zu verknüpfen?
natürlich kannst Du verknüpfen. Die Filterbedingung entspricht exakt einer Where Klausel wie in einer Abfrage nur ohne das Schlüsselwort Where. Und das kannst Du nach den gleichen Regeln mit AND und/oder OR verknüpfen.
Zitat.. wird eine Einstellung zu Duplikaten machen können. Finde ich aber nicht!
gibt es auch nicht. Nur die Datenherkunft (Select ....) kennt diese Einstellung. In SQL ist das SELECT DISTINCT .....
Hallo,
dann steckt in diesem Code sicherlich ein Fehler bzgl. Sonderzeichen:
Private Sub ProjektFilter_AfterUpdate()
'Call FilterSetzen
Me.Filter = "ProjName = '" & Me!ProjektFilter & "'" And "AktCAPA = '" & Me!CAPAFilter & "'"
Me.FilterOn = True
End Sub
Thema Kombinationsfeld: Ich habe aus der Abfrage das entsprechende Feld für den Filter in einer separaten Abfrage rausgefiltert und die als Datensatzquelle verwendet. Funktioniert.
Gruss
Hallo,
Du musst richtig zusammensetzen:
Me.Filter = "ProjName = '" & Me!ProjektFilter & "' And AktCAPA = '" & Me!CAPAFilter & "'"
Zur Fehlersuche kann man sich den Filterstring im Direktbereich ausgeben lassen.
Einfach mal nach Me.Filter diese beiden Zeilen ergänzen:
Debug.Print Me.Filter
Stop
Dann vergleichst Du mal Deine Version und meine. Dann die beiden Zeilen wieder löschen.
Hallo Klaus,
habe ich gemacht:
Private Sub ProjektFilter_AfterUpdate()
'Call FilterSetzen
Me.Filter = "ProjName = '" & Me!ProjektFilter & "'And AktCAPA = '" & Me!CAPAFilter & "'"
Debug.Print Me.Filter
Stop
Me.FilterOn = True
End Sub
Keine Anzeige im Direktbereich, Laufzeitfehler Datentypenkonflikt im Kriterienausdruck
Gruss
Hallo,
welche Datentypen (in der Tabelle nachsehen) sind denn ProjName und AktCAPA ?
Sind das Nachschlagefelder in der Tabelle ?
Hallo,
ProjName, Format Text
AktCAPA, Format Zahl
Beides keine Nachschlagfelder in Tabelle.
Gruss
Hallo,
bei Zahlen müssen die Hochkomma weg.
Me.Filter = "ProjName = '" & Me!ProjektFilter & "'And AktCAPA = " & Me!CAPAFilter
So jetzt gehts.
Vielen Dank an Euch Beide!!!