Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Filter-Button programmieren

Begonnen von Striving_Tom, Januar 31, 2020, 16:50:44

⏪ vorheriges - nächstes ⏩

Striving_Tom

Hallo,

Ich bin mir bewusst, dass man mit VBA viel (fast alles?) umsetzen kann. Ich mache allerdings mit VBA gerade meine ersten Schritte und es fällt mir an vielen Stellen noch schwer, die richtigen Ansätze zu finden. Ich suche keine "Fertiglösungen" sondern vor allem Unterstützung im Lernprozess, wie ich meine Aufgaben selber lösen kann. Also hoffe ich, dass ich von Euch hilfreiche Hinweise bekommen kann, "wie ich etwas machen kann" ( - Die Grundsätze sind gesucht. Die Details bekomme ich dann hoffentlich selbst hin - ) und wo ich nachsehen kann, um die benötigten Informationen zu finden. - Für das nachfolgend geschilderte Problem habe ich schon selbst recherchiert, komme aber gerade nicht weiter, daher die Bitte um Unterstützung durch die Mitglieder im Forum. 

Ich habe eine Tabelle mit einem Kennzeichen (=Feldname) "Art". Mögliche Einträge in diesem Feld sind: "A", "B", "C", "D". Nun möchte ich in einem Access-Formular eine Schaltfläche einbauen, mit der ich einen Filtervorgang auslösen kann. Die Schaltfläche (Button) habe ich erstellt.

Folgender Code funktioniert schon:
Private Sub btn_Filter_Click()
    DoCmd.ApplyFilter , "Art = 'A'"
End Sub


Ich könnte nun für jedes Filterkriterium eine eigene Schaltfläche einfügen. Das ist allerdings ziemlich "unelegant" und wird außerdem irgendwann "unübersichtlich".


  • Daher würde ich den Code gerne so erweitern, dass beim "Click" auf die Schaltfläche vom Nutzer ausgewählt werden kann, ob für die Filterung der Datensätze "A" oder "B" oder "C" oder "D" als Filterkriterium gesetzt werden soll.

  • Noch besser wäre es, wenn ( - ähnlich wie bei der Filterfunktion für Spalten in Excel - ) ausgewählt werden kann, dass statt eines einzigen Kriteriums für die Datensätze z.B. "A" bzw. "B". oder andere Kombinationen ausgewählt werden können.

  • Sollten die Filterkriterien manuell vorgegeben werden, oder lässt sich auf einfache Weise umsetzen, dass bei z.B. vier verschiedenen Einträgen (A-D) in der Spalte auch genau diese Einträge dem Nutzer zur Auswahl als Filterkriterium angeboten werden?

  • Wie gehe ich vor, bzw. wo kann ich Informationen finden, die mir bei dieser Fragestellung weiterhelfen?

Ich hoffe, Ihr könnt mir weiterhelfen.
Viele Grüße
Thommy

MzKlMu

Hallo,
wenn Du das vernünftig aufbauen willst, so lege für die 4 Werte eine Tabelle an mit einem Feld für einen Primärschlüssel. In Deiner jetztigen Tabelle tauschts Du dann die Art gegen die Zahl aus und nennst dieses Feld dann ArtID_F
ArtID    Art
1        A
2        B
3        C
4        B


Dann legst Du ein Kombinationsfeld mit dieser Tabelle als Datenherkunft. 2 Spalten, Spaltenbreiten 0cm;3cm.
Die ID wird ausgeblendet und der Text ist zu sehen.
Gefiltert wird über die Zahl.
Private Sub Kombifeldname_AfterUpdate()
    Me.Filter = "ArtID_F =" & Me.Kombifeldname
    Me.FilterOn = True
End Sub

Für einen zusammengesetzten Filter wird da aber deutlich aufwendiger.
Gruß Klaus

Striving_Tom

Hallo Klaus,

das war ja eine superschnelle Antwort. Herzlichen Dank !!!

Ich werde es schnellstmöglich ausprobieren.

Eine Zusatzfrage habe ich noch:
Gibt es irgendwo eine verständliche Erläuterung zu "Me." ?

Folgende Info-Seite habe ich gefunden:
https://docs.microsoft.com/de-de/office/vba/language/reference/user-interface-help/me-keyword
Ich verstehe das Ganze aber noch nicht. Der Einblick in und die Abgrenzung von  vielen der verwendeten Ausdrücke (Klassen, Klassenmodule, Module, Prozesse, Instanzen, Prozeduren; ...) fällt mir noch schwer.
Kann man die Funktion/Bedeutung/Verwendungsweise von "Me." auch einfacher erläutern? - Ist "Me." unbedingt erforderlich? Ist das als Abkürzung eines sonst erforderlichen (längeren) Ausdruckes zu sehen?

Viele Grüße
Thommy

Beaker s.a.

Hallo Thommy,
Me.
ist eine Referenz auf das Klassenmodul in dem der Code ausgeführt wird. Dazu
gehören Formulare, Berichte und eigene Klassen(module).
Auch wenn sich die Klasse selber kennt, sollte man mit "Me." darauf referenzieren.
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Striving_Tom

Hallo,

kann man das vielleicht so ausdrücken, dass bei einem Zugriff auf "Code/Funktionen/..." aus einem  anderen Modul mit dem "Begriff" vor dem Punkt auf genau jenes andere Modul verwiesen wird, wenn "Code/Funktionen/..." aber "vor Ort" ausgeführt werden oder von "vor Ort" stammen die Angabe möglicherweise weggelassen werden könnte.

Besser sollte aber mittels "Me." darauf hingewiesen werden, dass "Code/Funktionen/..." von innerhalb des Moduls stammen bzw. innerhalb des Moduls ausgeführt werden?

Sorry für meine noch bestehende Unkenntnis ...  ;)
Viele Grüße
Thommy

Beaker s.a.

Hallo Thommy,
Der Begriff vor dem "." oder auch "!" bezeichnet ein Objekt, dahinter kommt
dann eine Eigenschaft oder Methode diese Objektes.
Man kann "Me." auch weglassen. Ich finde den Code dann aber schlechter
lesbar.
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)