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
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..?
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 ????
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.
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
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.
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 ???
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.
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
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.
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!
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
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 ?!?!?!?
Hallo,
naja, von 2007 hast Du bisher nicts erwähnt...
versuch mal:
DoCmd.TransferSpreadsheet 1, 8, "Europcar Afrage", "C:\Temp\" & Dateiname & ".xls", True
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.
Also ich habe bei mir mal ein wenig herumprobiert - kann keine Probleme feststellen!
Dim Dateiname As String
Dateiname = InputBox("Bitte Dateinamen angeben", "Export nach Excel")
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "qry Honorar", "C:\Windows\Temp\" & Dateiname & ".xls", True
...arbeitet tadellos.
Wenn die Abfrage keine Daten liefert, stehe im Excel-Sheet lediglich die Spaltenbezeichnungen drin!
Wie lautet der Feldname deines ersten Exportfeldes? F1?
Wenn du Windows 7 verwendest gibts unter C:\ kein Temp
Habe mein letztes Posting aktualisiert.
Ich habe unter ACC2007 getestet allerdings als *.mdb was keine Probleme schaffte.
Datei speichern unter .... 2007-Format *.accdb
Test positiv.
Beide Dateien im Anhang!
p.s. der Vorschlag von Franz in #13 funktioniert ebenfalls mit der *.accdb einwandfrei
[Anhang gelöscht durch Administrator]
mhm, das ist seltsam, bei beiden Datenbanken bekomme ich den Laufzeitfehler 3011 ?!?!?!
Zum Laufzeitfehler 3011 gibts im Internet eine große Anzahl von Hinweisen.
Ich hab' mich da mal ein wenig schlau gmacht und gesehen, dass es Hinweise auf fehlende oder falsche Verweise gibt.
Ich hab# dir mal die Einstellungen von meiner Maschine dran gehängt - vergleiche mal mit deinen Einstellungen.
Auch gibts Hinweise darauf, die Konstanten durch ihren Zahlenwert zu ersetzen - versuchmal statt acExport 1 zu verwenden.
Das kann ja nicht sein, dass drei verschiedene Methoden / Arten auf meinem Rechner laufen und bei dir nicht!
Peter
[Anhang gelöscht durch Administrator]
Bei mir sieht's so aus.
[Anhang gelöscht durch Administrator]
Wenn du dich im VBA - Editor befindest Menü Extras .... Verweise
ups, du warst schneller
*hähähähä* dafür war ich schon zu Lebzeiten bekannt ;D ;D ;D
Aber an den Einstellungen kann's wohl nicht liegen, denn ich hab die selben wie du, sogar noch ein paar mehr.
Das Bild von dir zeigt die Verweise deiner Originaldatei.
Schau mal die in den beiden DBs an, die ich hier hochgeladen habe, ob die identisch mit meiner darstellung sind
so, nun klappt es. Lag an mir. Meine Abfrage heißt EuropcarAbfrage und nicht Europcar Abfrage. Jaja, wer lesen kann ist echt im Vorteil ::)
Also dann, vielen Dank für die Geduld.
Was noch interessant wäre - was passiert, wenn du die Abfrage manuell startest und das Ergebnis zu Testzwecken mal zu Fuß exportierst.
Wie gesagt, nun klappt ja alles :D
Na Gott sei Dank - eine Lösung! ::)
3011 besagt nebenbei auch, dass eine Abfrage im TransferSpreadsheet - Befehl nicht existiert.
Was ich aber nicht verstehe ist dass der Fehler kommt, wenn du das in meinen Beispieldateien ausführst ?!?
Setzt du bitte noch den Beitrag in deinem ersten Posting auf 'gelöst' - DANKE
Ich habe in deiner Datenbank das Verzeichnis auf C:\temp\ geändert und nun klappt das auch. Ins Hauptverzeichnis C:\ darf man wohl bei Win7 nicht so einfach was reinschreiben.
Wenn du die Benutzerkontensteuerung ganz runterdrehst sollte es gehen ::)
Mal schauen wie das später wird. Wenn ich mit der kompletten Anwendung fertig bin, soll das in einem VISTA Netzwerk von mehreren Usern genutzt werden. Da werd ich sicherlich noch auf einige Problem stoßen :P
Hmmm ...
wir werden hier sein! :)
Schönen Abend noch!