PDA

Vollständige Version anzeigen : Filter in Abfrage per vba setzen


Toni
30.09.2009, 10:41
Hallo zusammen,

ich komme hier nicht weiter:

Ich will nach Excel exportieren. Dazu nutze ich eine Abfrage. Alles soweit gut. Ich will jedoch den Filter der Abfrage so einstellen, wie er in einem Formular gerade eingestellt ist. Grund: Es sollen nur die Daten exportiert werden, die der Benutzer gefiltert hat.

Hat da jemand eine Lösung?

Vielen Dank!

Marsu65
30.09.2009, 11:07
Hallo Toni,
verwende eine Parameterabfrage (siehe Onlinehilfe).
Die Parameter kannst du via VBA einstellen. Wie das geht, ist hier beschrieben: FAQ 6.16 (http://www.donkarl.com/FAQ/FAQ6VBA.htm#6.16)

Toni
30.09.2009, 11:36
Hi Marsu,

ich glaube das klappt nicht. Wie soll ich einen Filter in die Parameter bekommen?

((Bezeichnung Like "*abc'") AND (Hersteller="helo") AND (Standort="Tresen"))

Mein Gedanke war, den Filter der Abfrage (Abfrageeigenschaften) mit einer Funktion zu belegen, die den Filter des Formulars beinhaltet. Geht aber leider nicht, es werden alle Datensätze angezeigt.

Kann jemand helfen?

sw-blitz007
30.09.2009, 11:38
Hallo,

nimm doch den SQL-String des gefilterten Formulars und erzeuge daraus
eine Abfrage (QueryDef.Append), welche Du dann nach Excel exportieren kannst.

Atrus2711
30.09.2009, 12:08
M.W. wird der Filter auch im Formular-Recordset nachgezogen. Den (oder einen Recordsetclone davon)köntest du dann per .CopyFromRecordset nach Excel rüberschieben. Ohen zwischengeschaltete Abrfrage.

Marsu65
30.09.2009, 16:32
Wie soll ich einen Filter in die Parameter bekommen?
Hast du dir in der OH den Text zu Parameterabfrage angesehen? Ich denke nicht, sonst hättest du wohl diese Frage nicht gestellt?!?
Die einzusetzenden Parameter ersetzen deinen Filter!

Hier noch ein paar Links für Martins Ansatz (KlickMich (http://www.ms-office-forum.de/forum/search.php?searchid=979015))

Toni
30.09.2009, 17:03
Hallo,

@sw-blitz007
Der Export wird durch den User über einen Button gestartet.
Außerdem will ich einen anderen Aufbau als im Formular.

Nebenbei: Wie komme ich denn an den SQL-String?

@Atrus2711
Ich benötige einen Anderen Aufbau als im Formular

@Marsu65
Ich stehe da auf dem Schlauch.
Ich kann für jedes Feld einen Parameter angeben. Das ist mir klar. Aber wie soll ich einen vom Benutzer individuell erzeugten Filter in die Abfrage bekommen? Sorry, ich kapier es nicht.

sw-blitz007
30.09.2009, 17:51
Hallo,

Außerdem will ich einen anderen Aufbau als im Formular.

Nebenbei: Wie komme ich denn an den SQL-String?

Wenn Du einen anderen Aufbau als im Formular / der zugrunde liegenden
Abfrage haben möchtest, musst Du per Code einen SQL-String bauen:

Dim s as String

s = "SELECT t.Feld1, t.Feld2, ... FROM DeinerTabelle AS t


Den Filter bekommst Du aus Me.Filter.

Wenn mich nicht alles täuscht, dann sollte das gehen:


s = s & " WHERE " & Me.Filter & ";"


wobei natürlich die Attribute aus Deinem SQL-String mit den Filterattributen
übereinstimmen müssen.

Toni
30.09.2009, 17:58
Das ist ein Weg. Danke!

Marsu65
01.10.2009, 00:51
Aber wie soll ich einen vom Benutzer individuell erzeugten Filter in die Abfrage bekommen? Ich bin bisher davon ausgegangen, dass Ich will jedoch den Filter der Abfrage so einstellen, wie er in einem Formular gerade eingestellt ist.bedeutet, dass ein Benutzer im Formular Filterkriterien eingibt. Diese könntest du als Kriterien für eine (gespeicherte) Parameterabfrage verwenden.

Wie erzeugt denn dein Benutzer seinen individuellen Filter?

BTW: Widerspricht deine im letzten Zitat gemachte Aussage dieser hierAußerdem will ich einen anderen Aufbau als im Formular.

Grundsätzlich kannst du eine gespeicherte Abfrage benutzen und diese mit Kriterien füttern oder eine Abfrage zur Laufzeit erstellen wie von Michael vorgeschlagen.

Toni
01.10.2009, 09:52
Hallo Marsu65,

der Benutzer gibt den Filter über ein Hilfsformular "Erweiterte Suche" ein. Das ist alles automatisiert. Jedenfalls ist das Formular dann z.T. sehr umfangreich gefiltert. Wie soll ich denn die Filterkriterien als Parameter in eine bestehende Abfrage bekommen?? Das wurde schon vorgeschlagen - ich verstehe jedoch nicht wie das gehen soll.

Es gibt keinen Widerspruch: Wenn ich das Formular direkt exportiere, dann habe ich den Aufbau des Formulars (Felder und Feldreihenfolge) in der Exceltabelle. Ich will jedoch eine standardisierte Ausgabe anhand einer gespeicherten Abfrage (Abweichnde Feldnamen und Reihenfolge, nicht alle felder im Export). Dass die zu filternden Felder in der Abfrage vorhanden sein müssen ist mir schon klar. Exportieren muss ich die ja nicht.

Atrus2711
01.10.2009, 10:09
Parameter sind ja nur ein Weg.

Wenn die Filterkriterien "beliebig kompliziert" werden und das Formular das schon macht, dann würde ich einfach den Me.Filter auslesen und als WHERE-Teil einer Abfrage nehmen, die die gleiche Quelltabellen hat wie das Formular.

Schema:
Currentdb.Querydefs("Demo").SQL = "SELECT * FROM Formularabfrage WHERE " & Me.Filter
Diese Demoquery müsste dann exportiert werden.

Toni
01.10.2009, 10:17
Hallo Atrus2711,

prima, so wird's gehen. Vielen Dank!