VBA zu schnell (Queries)

Hallo zusammen,

ich bin ein ziemlicher Neuling in Access und habe ein Problem: Ich definiere mir eine neue Abfrage, um diese dann in Excel zu exportieren.

Das Funktioniert ganz gut, solange die Abfragen einfach Art sind, wenn die Auddrücke aber komplizierter werden, dann ist meine Excel-Tabelle leer. Wenn ich mir vorher meine Abfrage anzeigen lasse, dann dauert es einen Moment, die Ergebnisse sind aber korrekt.

Gibt es eine Funktion, damit VBA wartet, bis eine Anweisung fertig ist? Vielleicht mache ich auch einen anderen Fehler, hier mein Code:

 'Erstellen der zu exportierenden Abfrage
 Dim sSQL As String
 Dim qdf As DAO.QueryDef
 sSQL = "SELECT Standort.Index AS Standort\_Index, Standort.Strasse, Standort.PLZ AS Standort\_PLZ, Standort.Ort AS Standort\_Ort, Vertragspartner.Name, Vertragspartner.PLZ AS Vertragspartner\_PLZ, Vertragspartner.Ort AS Vertragspartner\_Ort, Vertrag.Index AS Vertrag\_Index, Vertrag.Vertragsart, Vertrag.Automatentyp, Vertrag.RegTeam FROM Vertragspartner INNER JOIN (Standort INNER JOIN Vertrag ON Standort.Index=Vertrag.Standort) ON Vertragspartner.ID=Vertrag.Partner;"
 On Error Resume Next
 DoCmd.DeleteObject acQuery, "ExcelExport"
 Set qdf = CurrentDb.CreateQueryDef("ExcelExport", sSQL)
 DoCmd.OpenQuery "ExcelExport"
 DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel8, "ExcelExport", ".\test.xls", True

 Rem Öffnen der erstellten Datei
 Dim WWApp As Excel.Application
 Dim ExWB As Excel.Workbook
 Set WWApp = CreateObject("excel.application")
 WWApp.Application.Visible = True
 Set ExWB = WWApp.Workbooks.Open(".\test.xls")

Vielleicht kann mir jemand helfen…

Gruß,

Matthias

Hallo Matthias,

Gibt es eine Funktion, damit VBA wartet, bis eine Anweisung
fertig ist?

nein, die kannst du aber selber programmieren

Vielleicht mache ich auch einen anderen Fehler,

Bitte beim Code keine Pre-Tags setzen…wenn die SQL-Anweisung 2 Meter lang ist!

Vielleicht kann mir jemand helfen…

das Ausführen der Abfrage, sowie das exportieren kostet Zeit.
Du rufst Excel zu schnell auf.

Entweder du programmierst eine Wareschleife, oder du rufst Excel separat über einen zusätzlichen Button auf.

Grüße aus Essen
Wolfgang
(Netwolf)

Hallo,

Bitte beim Code keine Pre-Tags setzen…wenn die
SQL-Anweisung 2 Meter lang ist!

OK, Sorry. So weit hab ich in dem Moment nicht gedacht…

Entweder du programmierst eine Wareschleife, oder du rufst
Excel separat über einen zusätzlichen Button auf.

Da ich nicht weiß, wie groß die Datenmenge ist, wird das mit den zusätzlichen Button wohl das beste sein.

Vielen Dank für die Hilfe.

So würde ich es machen
Hallo Matthias,

versuch es alternativ mal mit einer Tabellenerstellungsabfrage in Access. Die erstellte Tabelle kannst Du auch mit Excel verknüpfen. Geht normalerweise recht schnell, unkomplziert und lässt sich einfach in Makros einbauen. Falls jedoch weitere Berechnungen in Excel gemacht werden und zusätzlich die Datei per Makro abgespeichert (und auch gleich per Mail verschickt) wird, empfehle ich unter Datenbereicheigenschaften die Einstellungen zu ändern. (Leider kenne ich die Bezeichnung des zu deaktivierenden Klickfeldes nicht auswendig.) Ansonsten kann es Dir passieren, dass die Berechnungen nicht vollständig sind, die Datei aber dennoch gespeichert wird, falls der Datenimport mal wieder etwas länger dauert.

Ich baue fast alle Reports nach diesem Schema. Klappt wirklich gut.

MfG
Stephan

PS: Die Datenbereichseigenschaften in Excel zu ändern hilft nach meiner Erfahrung nicht, wenn man eine normale Abfrage aus Access verlinkt.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]