Office: KeyPress-Ereignis zum aktualisieren des Formular-Filters

Helfe beim Thema KeyPress-Ereignis zum aktualisieren des Formular-Filters in Microsoft Access Hilfe um das Problem gemeinsam zu lösen; Hallo, allerseits! Ich habe hier Folgendes vor (was z.T. auch bereits klappt): In einem Endlos-Formular befindet sich im Fußbereich ein u.a.... Dieses Thema im Forum "Microsoft Access Hilfe" wurde erstellt von miriki, 14. Mai 2008.

  1. miriki Erfahrener User

    KeyPress-Ereignis zum aktualisieren des Formular-Filters


    Hallo, allerseits!

    Ich habe hier Folgendes vor (was z.T. auch bereits klappt):

    In einem Endlos-Formular befindet sich im Fußbereich ein u.a. Textfeld. Wird etwas in dieses Textfeld eingegeben, sollen die Datensätze nach dem Inhalt dieses Textfeldes ("beginnt mit ...") gefiltert werden.

    Bislang habe ich das über das Textfeld und einen Button "Filter" realisiert, was auch anstandslos funktionierte. In einer Prozedur wird ein SQL-String aufgebaut und als Filter auf das Formular angewandt. (Es sind ein paar mehr Felder, nach denen in Kombination gefiltert werden kann.)

    Nun kam die Bitte, daß nach diesem einen Feld möglichst ohne das lästige Button-Klicken gefiltert werden soll. Der Filter soll sich also sofort während der Eingabe aktualisieren.

    Im Prinzip kein Problem, dachte ich mir so in meiner jugendlichen Unbekümmertheit, und schnappte mir die Ereignisse KeyPress, OnChange und BeforeUpdate, um mal zu gucken, wo sich die Aktualisierung des Filters am besten unterbringen lassen könnte.

    Das beste Resultat scheine ich mit KeyPress erreichen zu können. Denn dort habe ich so ganz nebenbei auch noch die Möglichkeit, die Eingabe auf die Ziffern hin einzuschränken. Aber es gibt doch noch den einen oder anderen Knackpunkt:

    Die Filter-Routine entnimmt .Value aus den Feldern, um den Filter aufzubauen. Meine "Manipulationen" am Textfeld im KeyPress irren zwischen .Value und .Text hin und her, aber irgendwie verwirre ich damit wohl alles. Das führt dann bis hin dazu, daß die Textanzeige im Feld eine andere ist, als der Wert, der Textinhalt auch nicht ganz markiert werden kann usw.

    So baue ich den Filter auf und wende ihn auf das Formular an:
    Code:
    Private Sub Suchfilter_aufbauen()
    
        Dim v(5) As String
        Dim f(5) As String
        Dim s As String
        Dim n As Long
    
        v(1) = Trim$(Me!MotorNrAuswahl.Value & " "): f(1) = "motornummer"
        v(2) = Trim$(Me!MotorZylAuswahl.Value & " "): f(2) = "motorzyl"
        v(3) = Trim$(Me!MotorMuAuswahl.Value & " "): f(3) = "motormu"
        v(4) = Trim$(Me!MotorBauAuswahl.Value & " "): f(4) = "motorbau"
        v(5) = Trim$(Me!MotorVarAuswahl.Value & " "): f(5) = "motorvar"
    
        s = ""
        For n = 1 To 5
            If v(n) <> "" Then
                If s <> "" Then
                    s = s & " AND "
                End If
                Select Case n
                    Case 1
                        s = s & "([" & f(n) & "] LIKE '" & v(n) & "*')"
                    Case 2, 3, 4, 5
                        s = s & "([" & f(n) & "] = '" & v(n) & "')"
                End Select
            End If
        Next n
    
        If s <> "" Then
            's = "(" & s & ")"
            'MsgBox s
            DoCmd.ApplyFilter , s
          Else
            DoCmd.ShowAllRecords
        End If
    
    End Sub
    Meine Versuche mit dem KeyPress sehen wie folgt aus:
    Code:
    Private Sub MotorNrAuswahl_KeyPress(KeyAscii As Integer)
    
        Dim altertext As String
        Dim neuertext As String
    
        'MsgBox KeyAscii
    
        Select Case KeyAscii
    
            '48 .. 58 = Ziffern 0 .. 9
            Case 48 To 58 'Ziffern werden zugelassen
    
                altertext = Trim$(Me!MotorNrAuswahl.Value & " ")
                neuertext = altertext & Chr$(KeyAscii)
    
                Me!MotorNrAuswahl.Value = neuertext
                Suchfilter_aufbauen
    
                'If fncRecordCount = 0 Then
                '    'Me!MotorNrAuswahl.SetFocus
                '    Me!MotorNrAuswahl.Value = altertext
                '    Suchfilter_aufbauen
                'End If
    
                Me!MotorNrAuswahl.SetFocus
                On Error Resume Next
                Me!MotorNrAuswahl.Text = Me!MotorNrAuswahl.Value
                Me!MotorNrAuswahl.SelStart = 255 'Len(Me!MotorNrAuswahl.Value) + 1
                Me!MotorNrAuswahl.SelLength = 0
                On Error GoTo 0
                'Me!MotorNrAuswahl.SetFocus
    
                KeyAscii = 0
    
            Case 32 To 47, 58 To 255 'andere Zeichen werden abgeblockt
    
                KeyAscii = 0
    
            Case Else
    
                ' Steuerzeichen werden zugelassen
    
        End Select
    
    End Sub
    Das ist jetzt gerade der aktuelle Stand. Ich hab schon diverse andere Varianten durchgespielt, aber irgendwie nie so recht zufriedenstellend.

    Besondere Kopfschmerzen bereitet mir der z.Z. auskommentierte Block mit dem fncRecordCount. Hier soll die Eingabe des letzten Zeichens rückgängig gemacht werden, wenn es dazu führte, daß die Ergebnismenge leer ist. Aber spätestens ab dann stimmen Bildschirmausgabe und Feldwert nicht mehr überein.

    Ah, ja, die fncRecordCount-Funktion:
    Code:
    Private Function fncRecordCount() As Long
    
        Dim rs As DAO.Recordset
    
        Set rs = Me.RecordsetClone
        On Error Resume Next
        rs.MoveLast
        On Error GoTo 0
        fncRecordCount = rs.RecordCount
    
    End Function
    Aber allgemein bereitet mir die Routine auch diverse "kann nicht, weil nicht focus" Fehlermeldungen, die trotz expliziter .SetFocus beharrlich wiederkehren.

    Außerdem habe ich noch ein kleines Problem mit den Editier-Tasten: Backspace hat Code 8. Lasse ich den im SELECT mit zu, habe ich ein quadratisches Zeichen im Textfeld. Und die ENTF-Taste löst das KeyPress leider gleich gar nicht aus. Kann man da noch was machen?

    Gruß, Michael
     
    miriki, 14. Mai 2008
    #1
  2. jens05 Erfahrener User
    Hallo,
    versuche es mal im Textfeldereignis "Bei Änderung", welches bei jeder Änderung reagiert, und lass das KeyPress Ereignis weg.

    Desweiteren solltest du auf "ApplyFilter" verzichten und die Filtereigenschaft des Formulares verwenden. ;) Die Zehn Gebote
     
    jens05, 24. Mai 2008
    #2
  3. miriki Erfahrener User
    Das war mein erster Ansatz und der brachte mir die gleichen oder zumindest sehr ähnliche Probleme. Vor allem das Problem mit dem aktuell im Feld angezeigten Text, der Markierung des Textes usw. in Verbindung mit SelStart und SetFocus war da ziemlich gleich.

    Ja, die kenne ich... Und genau dieser eine Punkt dürfte auch der Einzige sein, den ich beharrlich seit Jahren ignoriere. Ich kann nicht mal genau sagen, warum eigentlich. ;-)

    Gruß, Michael
     
    miriki, 26. Mai 2008
    #3
  4. jens05 Erfahrener User

    KeyPress-Ereignis zum aktualisieren des Formular-Filters

    Hallo,
    kannst du das Form mal online stellen, das sollte ohne Probleme gehen ;)
     
    jens05, 26. Mai 2008
    #4
  5. miriki Erfahrener User
    Das geht nicht so ganz ohne Probleme, weil dieses Form nur ein kleiner Teil eines größeren Projekts ist, in dem auch sensiblere Teile / Daten enthalten sind.

    Ich werd aber mal zusehen, wie ich das Form mit der zugehörigen Tabelle separiert kriege. Wird aber diese Woche wahrscheinlich nichts mehr.

    Gruß, Michael
     
    miriki, 27. Mai 2008
    #5
Thema:

KeyPress-Ereignis zum aktualisieren des Formular-Filters

Die Seite wird geladen...
  1. KeyPress-Ereignis zum aktualisieren des Formular-Filters - Similar Threads - KeyPress Ereignis aktualisieren

  2. Bestimmtes Ereignis(Datum) in Zeitraum finden

    in Microsoft Excel Hilfe
    Bestimmtes Ereignis(Datum) in Zeitraum finden: Hallo zusammen, ich brauche dringend Hilfe mit einer Excel-Formel. Ich habe eine Tabelle mit Veranstaltungen und möchte gerne auslesen, ob für Datum X eine Veranstaltung geplant ist. Das Problem...
  3. In welchem Ereignis hinterlege ich die Warnmeldung?

    in Microsoft Excel Hilfe
    In welchem Ereignis hinterlege ich die Warnmeldung?: Hallo, in einem Userform rufe ich, nach der Änderung eines Wertes in einer Textbox, folgenden Code auf: Code: Private Sub txtRnrStart_AfterUpdate() Dim strWarnung As String strWarnung =...
  4. Globales Ereignis im Formular

    in Microsoft Access Hilfe
    Globales Ereignis im Formular: Hallo, ich möchte bei einem Klick auf dem Formular ein Counter zurücksetzen. Nun habe ich auf dem Formular verschiedene Objekte (Register, Textboxn, Listboxn…) Gist es bei einem Formular ein...
  5. Ereignis bei Änderung in Register in Unterformular

    in Microsoft Access Hilfe
    Ereignis bei Änderung in Register in Unterformular: Hallo Forum, bitte um Hilfe zu folgendem: Zu einer Tabelle besteht ein Formular mit Register und auf einer der Register-Seiten - da dort kein (unter-)Register erstellt werden kann - ein...
  6. MS Teams Live-Ereignis Standbild Auflösung?

    in Microsoft Teams Hilfe
    MS Teams Live-Ereignis Standbild Auflösung?: Hallo zusammen, bei uns steht ein VIP Live-Ereignis an und irgendwie kriegen wir das Standbild nicht in guter oder gar annehmbarer Qulität gezeigt. Ich finde leider nirgends die Anforderungen...
  7. Externe Referenten in Teams Live-Ereignis

    in Microsoft Teams Hilfe
    Externe Referenten in Teams Live-Ereignis: Hallo zusammen, kann mir jemand sagen, ob ich in einem Teams Live-Ereignis Personen, die nicht in meiner Organisation sind, als Referent hinzufügen kann? Und wenn ja, wie finde ich die...
  8. KeyPress mit verschiedenen Eigenschaften

    in Microsoft Excel Hilfe
    KeyPress mit verschiedenen Eigenschaften: Hallo, ich habe zwei Dinger am laufen: Einerseits wird die Datumseingabe gesteuert (siehe oben), andererseits soll bei Drücken der ENTER-Taste ein anderes Makro aufgerufen werden (siehe unten)....
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden