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. :(
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.
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
Und das ganze LIKE-Gedöns entfällt auch, wenn man atomare Inhalte in
eigene Felder schreibt.
;D
Hab es hinbekommen, danke