August 15, 2020, 06:13:12

Neuigkeiten:

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


Kombinationsfeld mit suchfunktion mit VBA Filtern

Begonnen von shinoda70, Juni 09, 2020, 15:13:56

⏪ vorheriges - nächstes ⏩

shinoda70

Hallo Leute,

ich brauche dringend Eure Hilfe  :'(
Bin gerade dabei eine Datenbank für Betriebsmittel zu erstellen.
Jetzt möchte ich ein (Such- und Übernahme-)Kombinationsfeld (welches ich mit dem Assistenten eingerichtet habe) gerne per VBA filtern.

Also das Feld greift ja auf eine SQL Datensatzherkunft zu: Select [01a_Erweiterte Werkzeugdaten].[Werkzeugnummer] ...usw
Jetzt möchte ich die Werkzeugnummern gerne filtern.
Die Werkzeugnummern bestehen aus zwei ARTEN.
Einmal mit der Anfangszahl 1, und einmal mit der 2. 
Beispiel: 1.0015-01, 1.0016-01, 1.0016-02, 2.0015-01, 2.0015-02, usw...

Die gesamten Datensätze habe ich per Optionsgruppenfeld "alle", "1.xxxx-xx", und "2.xxxx-xx" schon erfolgreich über VBA gefiltert


Private Sub FilterWkzdtn_AfterUpdate()
  Select Case Me!FilterWkzdtn
         Case 1
            Me.Filter = ""
            Me.FilterOn = True
         Case 2 '
            Me.Filter = " [Werkzeugnummer] like '1*" & strWert & "*'"
            Me.FilterOn = True
         Case 3
            Me.Filter = " [Werkzeugnummer] like '2*" & strWert & "*'"
            Me.FilterOn = True
     End Select
End Sub


Jetzt die Frage.....
Kann man das "Pulldown" Such-Kombinationsfeld auch filtern????
Im Moment werden mir noch beide Werkzeugnummern, also alle 1er und 2er im (Such)Kombifeld angezeigt.  :(

   

crystal

Hallo,
was ich aus der rudimentären Beschreibung entnehme, ist leider nicht viel...

Es fehlen m.E. auch gewisse Standards bei der Benennung von Feldern (Controls)...

Aber gleichviel - statt mit einem Filter zu arbeiten, solltest du der Combobox eine .Recordsource zuordnen.
Also im Event Afterupdate des Optionsgruppe etwa so:

...
CONST c34 as String = """"  'dies weist der Konstanten c34 ein "Gänsefüßchen" zu, also ein simples "
...
Case 1
   cboMyCombobox.Recordsource = "SELECT blabla FROM table;"
Case 2
   cboMyCombobox.Recordsource = "SELECT blabla FROM table WHERE tableFeld LIKE " & c34 & "1*" & c34 & ";"
Case 3
   cboMyCombobox.Recordsource = "SELECT blabla FROM table WHERE tableFeld LIKE " & c34 & "2*" & c34 & ";"
End Select



Dein Zugriff auf "Me.Filter" etc. setzt ja keinen Filter für die Combobox, sondern für "Me". Und das ist m.E. in dem Fall die Optionsgruppe selbst oder das Formular gesamt (hab ich nicht weiter geprüft, probier mal im Direktfenster "?Me.Name" nachdem du einen Breakpoint z.B. bei "End Select" gesetzt hast). Mir scheint die Verwendung von "Me.***" hier falsch. Ich frage mich, ob dieser Code ohne Fehler kompiliert werden kann. Bin mir auch nicht sicher, ob Comboboxen Filter überhaupt unterstützen, deshalb die Zuweisung von .Recordsource im obigen Beispiel.
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

DF6GL

Juni 09, 2020, 17:47:25 #2 Letzte Bearbeitung: Juni 09, 2020, 17:52:33 von DF6GL
Hallo,

er filtert ja nicht das Kombifeld, sondern das Form ("Me.Filter) zunächst mit der Optionsgruppe.

Einzubauen ist ein zusätzliches Kombifeld ("cmbSuchen"), das mit der Optionsgruppen-Auswahl (ähnlich wie beschrieben) gefiltert wird.

Das Gänsefuß-Getöse braucht es nicht:

Private Sub FilterWkzdtn_AfterUpdate()
  Select Case Me!FilterWkzdtn
         Case 1
                 Me!cmbSuchen.Rowsource = " Select  WerkZg_ID, Werkzeugnummer from  01a_Erweiterte Werkzeugdaten  Order by  Werkzeugnummer"

        Case 2
                 Me!cmbSuchen.Rowsource = " Select  WerkZg_ID, Werkzeugnummer from  01a_Erweiterte Werkzeugdaten  Where Werkzeugnummer Like '1*'   Order by  Werkzeugnummer"

         Case 3
                  Me!cmbSuchen.Rowsource = " Select  WerkZg_ID, Werkzeugnummer from  01a_Erweiterte Werkzeugdaten Where Werkzeugnummer Like '2*'   Order by  Werkzeugnummer"
     
End Select
End Sub



Kombifeld "cmbSuchen":
Datensatzherkunft:  leer
Spaltenanzahl: 2
Spaltenbreiten: 0cm;6cm
gebundene Spalte: 1

Das Kombifeld filtert anschließend  das Form, wobei "Werkzg_ID" der Primärschlüssel (Zahl Long, Autowert) in der Tabelle ist.

Sub cmbSuchen_Afterupdate()

Me.Filter " Werkzg_ID = " & Me!cmbSuchen
Me.FilterOn =True

End Sub

Beaker s.a.

Und das ganze LIKE-Gedöns entfällt auch, wenn man atomare Inhalte in
eigene Felder schreibt.
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.


shinoda70