Vermutlich gibt es für mein Problem eine simple Lösung, nur finde ich sie
nicht:
Eine gespeicherte Abfrage soll als Excel-Tabelle ausgegeben werden. Dazu
muss die Abfrage gefiltert werden. Z.B. sollen nur Datensätze exportiert
werden, wo die Spalte "Jahr" den Wert "2009" hat.
Folgendes geht leider nicht (Fehlermeldung Laufzeitfehler 2491, Die Aktion
oder Methode ist nicht zulässig, da das Formular bzw. der Bericht nicht an
eine Tabelle oder Abfrage gebunden ist)
DoCmd.ApplyFilter "MeineAbfrage", "Jahr = '2009'"
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "MeineAbfrage",
"Datei", True
Folgendes bringt keine Filterwirkung (es werden stattdessen sämtliche
Datensätze exportiert)
DoCmd.OpenQuery "MeineAbfrage", acViewNormal, acReadOnly
DoCmd.ApplyFilter "MeineAbfrage", "Jahr = '2009'"
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "MeineAbfrage",
"Datei", True
DoCmd.Close acQuery, "MeineAbfrage"
Was könnte ich stattdessen tun? Der User soll nur auf einen Formularknopf
klicken, der Export soll dann vollautomatisch stattfinden. Die nötigen
Parameter sind natürlich veränderlich und sollen bei jedem Aufruf errechnet
werden.
Danke für Tipps
Raimund Gryszik, Berlin
Am 29.03.2010 11:40, schrieb Raimund Gryszik:
> Eine gespeicherte Abfrage soll als Excel-Tabelle ausgegeben werden. Dazu
> muss die Abfrage gefiltert werden. Z.B. sollen nur Datensätze exportiert
> werden, wo die Spalte "Jahr" den Wert "2009" hat.
>
> Folgendes geht leider nicht (Fehlermeldung Laufzeitfehler 2491, Die Aktion
> oder Methode ist nicht zulässig, da das Formular bzw. der Bericht nicht an
> eine Tabelle oder Abfrage gebunden ist)
>
> DoCmd.ApplyFilter "MeineAbfrage", "Jahr = '2009'"
>
> DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "MeineAbfrage",
> "Datei", True
>
> Folgendes bringt keine Filterwirkung (es werden stattdessen sämtliche
> Datensätze exportiert)
>
> DoCmd.OpenQuery "MeineAbfrage", acViewNormal, acReadOnly
> DoCmd.ApplyFilter "MeineAbfrage", "Jahr = '2009'"
>
> DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "MeineAbfrage",
> "Datei", True
>
> DoCmd.Close acQuery, "MeineAbfrage"
>
> Was könnte ich stattdessen tun? Der User soll nur auf einen Formularknopf
> klicken, der Export soll dann vollautomatisch stattfinden. Die nötigen
> Parameter sind natürlich veränderlich und sollen bei jedem Aufruf errechnet
> werden.
Du könntest eine weitere Abfrage für den Export verwenden. Vor dem
Export änderst Du entsprechend den SQL-String der Abfrage und baust So
Dein Filterkriterium mit ein:
Dim strSQL As String
strSQL = "SELECT * FROM DeineBisherigeAbfrage " & &
"WHERE Jahr = '2009'"
CurrentDb.QueryDefs("DeineNeueAbfrage".SQL = strSQL
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, _
"DeineNeueAbfrage", "Datei", True
BTW: "Jahr" ist ein schlechter Name für ein Feld. Jahr ist ein in Access
reserviertes Wort. Weitere Infos findest Du hier:
www.donkarl.com?FAQ1.5
(Link in einer Zeile)
HTH
--
Thomas
Homepage: www.Team-Moeller.de
Du verrätst zwar nicht, wo und wie die Parameterwerte
"errechnet werden", aber irgendwie bekommst du sie ja
wohl in den Code. Daher:
Du könntest die Werte in Textfelder auf dem Formular schicken
(müssen nicht sichtbar sein) und in der Abfrage Bezüge auf die
Textfelder als Kriterium verwenden.
Oder du hast deine Werte in Variablen und übergibst sie per
Funktion an die Abfrage. s. www.donkarl.com?FAQ3.15
--
Servus
Karl
****************
Access-FAQ: http://www.donkarl.com
vielen herzlichen Dank. Das ist GENAU die Masche, die ich gesucht hatte.
Danke
Raimund
vielen Dank. Das ist auch eine sehr gute Idee. Mal sehen, welche Methode ich
anwenden werde.
Danke
Raimund