Neuigkeiten:

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

Mobiles Hauptmenü

Abfrage in XLS speichern mit Namen anders als der Abfragename

Begonnen von harvey186, Oktober 04, 2010, 14:53:52

⏪ vorheriges - nächstes ⏩

harvey186

Moin,

ich hab da mal wieder ne Frage. Google hat mir leider nicht viel geholfen :-\
Also, ich möchte das Ergebnis einer Abfrage als .xls speichern. Super finde ich die Möglichkeit per Makro "SendenObject", aber ich habe keine Möglichkeit gefunden, dass mein User den Namen der Excel Datei selber eingeben kann. Das heißt, die Abfrage sucht diverse Sätze für eine Rechnung heraus. Das Ergebnis soll dann unter dem Namen "Anlage zur Rechnung xxx.xls" (xxx = Rechungsnummer) verschickt werden.

Wahrscheinlich muß da was mit VBA gemacht werden, oder ??

Danke schon mal,
Harvey

DF6GL

Hallo,

Du liegst nicht ganz falsch  ;)

Andererseits: Warum soll denn der User überhaupt eine Exceldatei wählen, wenn deren Name hauptsächlich eh von der Rechnungsnummer bestimmt wird..?


harvey186

Mhm, das sagt mir nun nicht viel ?!?!?
Bisher habe ich es immer nur geschafft, dass die Excel Datei so heißt wie die Abfrage,
Wenn ich automatisch das Abfrage Kriterium, also die Rechnungsnummer, als Namen für die xls benutzen kann, wäre das auch nicht schlecht.
Die Frage ist nur: Wie ????

DF6GL

Hallo,

wenn ich (oder jemand anderes) Dir eine passende Lösung präsentieren soll, dann mußt Du auch eine konkrete, vollständige und authentische Beschreibung Deiner Gegebenheiten hier posten.   ::)


Vielleicht sagt ja das Lesen der VBA-Hilfe zu Transferspreadsheet etwas mehr..

Das Abfragekriterium muß doch auch irgendwo herkommen. Ich nehme nicht an, dass die RechNr fest in der Abfrage eingebaut ist.

database

Hallo,

denkbar wäre eine Lösung in folgender oder davon abgeleiteter Form ohne jetzt deine tatsächlichen Gegebenheiten zu kennen:

Den Code in das Klick-Ereignis eines Button ...


Private Sub DeinButton_Click()

    Dim Dateiname As String

    Dateiname = InputBox("Bitte Dateinamen angeben", "Export nach Excel")

    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "NameDeinerAbfrage", "C:\" & Dateiname & ".xls", True

End Sub


Wenn du nun wie von Franz angesprochen die Rechnungsnummer als Kriterium (Parameter z.B. [Bitte RgNr eingeben]) in deiner Abfrage definiert hast,
wirst du automatisch nach dieser Nummer gefragt, wenn die Funktion ausgeführt wird.
Wenn die Nummer aber in einem FormFeld steht wäre es noch besser, da die Fehlerquelle Falscheingabe wegfällt.  ;)


Grüße
Peter

harvey186

Moin zusammen,

sorry, ich dachte ich hätte alles ausführlich beschrieben, aber dem war wohl nicht so.
Also:
1. Aufruf der Abfrage
2. Eingabe der Rechnungsnummer (Abfrageparameter)
3. Speichern als .xls

-- ich hab keine Ahnung, was ich noch mehr erklären soll/kann ---

Vielleicht sollte ich noch bemerken, dass der User keinen Zugriff auf "normale" Access Funktionen hat, also z.B. den ExportButton im Access Menü, denn Access liegt "versteckt" im Hintergrund.

database

Hallo,

hast du meinen Vorschlag ausprobiert?

1. Du wirst nach einem Dateinamen gefragt
2. Du wirst nach der Rechnungsnummer gefragt (wenn die als Abfrageparameter deklariert ist)
3. die Datei wird als *.xls auf C:\ abgelegt

Zitatohne jetzt deine tatsächlichen Gegebenheiten zu kennen
...darunter wäre dann zu verstehen, dass ich weder den Namen deiner Abfrage noch den gewünschten Speicherort deiner neuen *.xls kenne.

Zitatdenn Access liegt "versteckt" im Hintergrund
... und womit arbeiten dann deine User? Die müssen doch wenigstens Zugriff auf irgend ein Formular haben um etwas zu vernalassen oder aufzurufen  ???


harvey186

Das mit dem Button, werd ich mal ausprobieren (heute Abend).

Die User haben ein Hauptmenü (im Vollbildmodus) vor sich und arbeiten nur mit den diversen Menüpunkten zum Eingeben/Pflegen der Daten und für diverse vordefinierte Abfragen und Berichte. 

database

Hi,

also ich denke, dass es ohne ein Formular, auf dem sich zumindest der Aufrufbutton unterbringen lässt nicht laufen wird.
M.W. kann mittels einer Abfrage kein solcher Code aufgerufen werden - möglicherweise ließe es sich ins Open oder Close Ereignis eines Berichts verpacken.

Greets

harvey186

#9
OK, mein Fehler. Die User starten einen Bericht, der die Abfrage aufruft. Beim Starten des Berichts geben Sie die gewünschte Rechnungsnummer ein.

Ich habe das gerade mit dem Button ausprobiert. Klappt leider nicht. Ich bekomme die Fehlermeldung:
Laufzeitfehler 3011: Access kann das Objekt C:\Test.xls nicht finden

Scheinbar muß die Exceldatei schon da sein.

Und wenn ich sie vorher anlege, dann gibt es zwar keine Fehlermeldung, aber es werden keine Daten exportiert.

database

ZitatScheinbar muß die Exceldatei schon da sein.

Nein, das gibts nicht...

Ich hab' das durchgespielt und ohne Probleme ausführen können!

Hast du den Cocde von mir kopiert oder hast du selbst geschrieben
kontrolliere bitte mal    ...   DoCmd.TransferSpreadsheet acExport  ....  dass da nicht ungewollter Weise acImport steht

Du kannst ayuch noch versuchen hier   ...  acSpreadsheetTypeExcel9   ... auf eine frühere Version zu exportieren also 4 oder 5

Hast du als Benutzer der Datenbank Schreibrechte auf C: ?
Wenn die Rechner in einer Domänenstruktur stehen, kann es sein, dass diese Rechte nicht bestehen!


harvey186

Ich habe deinen Code benutzt und den Namen meiner Abfrage eingegeben und das temp Verzeichnis (zum testen)
Private Sub Button1_Click()

   Dim Dateiname As String

   Dateiname = InputBox("Bitte Dateinamen angeben", "Export nach Excel")

   DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "Europcar Afrage", "C:\Temp\" & Dateiname & ".xls", True

End Sub

harvey186

#12
Kann es sein, dass es bei Access 2007 irgendwie anders laufen muß ? Ich habe nämlich per google gesehen, dass es mit DoCmd.TransferSpreadsheet  bei 2007 Probleme geben soll.

lso, ich weiß nicht warum, aber nun wird die Exceldatei angelegt, aber keine Daten. Es wird nur die Zelle A1 mit dem Wert "F1" gefüllt ?!?!?!?

DF6GL

#13
Hallo,

naja, von 2007 hast Du bisher nicts erwähnt...

versuch mal:

DoCmd.TransferSpreadsheet 1, 8, "Europcar Afrage", "C:\Temp\" & Dateiname & ".xls", True

harvey186

doch, da steht ... "C:\Temp\" ... im Befehl

Ja, das Formular hat die Rechnungsnummer, denn das ist ja schließlich das Abfragekriterium, mit dem ich dem Bericht erstelle.

Die Abfrage heißt "Europcar Abfrage" und da sind ein Haufen Daten drin. Die sehe ich ja, bevor ich auf den Button klicke.

Und die Datei wird jetzt ja auch erstellt, aber wie gesagt, nur in Zelle A! steht der Wert "F1". Weiß der Himmel wo der herkommt.

Ich glaub, das einfachste ist, ich lasse den Bericht in der Seitenansicht anzeigen und dann kann der User mit der rechten Maustaste draufklicken und "Export" auswählen. Dafür habe ich nur noch keinen Trick gefunden, dass die Seitenansicht im Querformat geöffnet wird.