Fragensteller
TransferSpreadsheet funktioniert nicht.

Frage
-
Hallo zusammen
Ich brauche Eure Hilfe, da ich nicht mehr weiter komme. Ich möchte Daten aus der DB in ein Excel-Sheet exportieren. Das mache ich mit untenstehendem Code:
Sub test() 'Supercode 950 db.CreateQueryDef strNameTempQuery, strSQL 970 db.QueryDefs.Refresh 980 DoEvents 990 MsgBox "Blablabla.", vbInformation + vbOKOnly, "Supertitel" Dim qrf As QueryDef For Each qrf In db.QueryDefs Debug.Print qrf.Name Next ' Daten exportieren 1000 DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, strNameTempQuery, strFileName 'Weiterer Supercode End Sub
Zwischen den Zeilen 950 und 1000 steht kein weiterer Code. Die Variablen strNameTempQuery, strSQL und strFileName sind immer mit dem richtigen Wert gefüllt.
Jetzt habe ich eine Prozedur, welche diese 'Test'-Prozedur aufruft und mir die Daten wie gewünscht in ein Excel-Sheet abfüllt.
Das Problem ist, dass ich eine andere Prozedur habe, welche diese 'Test'-Prozedur ebenfalls aufruft, einzelne Codezeilen zu beginn nicht aufruft, mir dann aber bei TransferSpreadsheet diesen Fehler bringt:
? err.Number
3011
? err.Description
The Microsoft Access database engine could not find the object 'TempExport'. Make sure the object exists and that you spell its name and the path name correctly. If 'TempExport' is not a local object, check your network connection or contact the server administrator.Ich frage ja gleich vor der Ausführung den Namen aller Queries ab und dort ist die 'TempExport' vorhanden! Also von der einen Prozedur aufgerufen funktioniert alles (auch mehrfach, hatte nie probleme), von der anderen Aufgerufen funktioniert es nicht, obwohl alle Parameter den richtigen Wert haben und die Abfrage existiert.
Decompile und alles in neue DB importiert hat keine Verbesserung gebracht.
Kann mir jemand hier weiterhelfen?
Danke und Gruss Thomas
Alle Antworten
-
Hallo
Tja, manchmal funktioniert mein Code, manchmal nicht. Ich weiss zwar nicht wieso, aber ist nicht so wichtig.
Danke und Gruss Thomas
- Als Antwort markiert Alphawolfi Samstag, 24. Mai 2014 09:26
- Tag als Antwort aufgehoben Alphawolfi Montag, 26. Mai 2014 07:53
-
Am 21.05.2014 schrieb Alphawolfi:
Zwischen den Zeilen 950 und 1000 steht kein weiterer Code. Die Variablen strNameTempQuery, strSQL und strFileName sind immer mit dem richtigen Wert gefüllt.
Ich mach das so ähnlich, funktioniert einwandfrei:
Dim qryExcelFile As DAO.QueryDef Dim rs As DAO.Recordset, rsSQL As String Dim strQuery As String strQuery = GetOption("AbfragenameExcelExport") Set dbsAlwaysOpen = DBEngine(0)(0) Dim qdf As DAO.QueryDef 'Falls die Abfrage mit dem Namen "qryExcelFile" schon vorhanden ist, 'vorher löschen. For Each qdf In dbsAlwaysOpen.QueryDefs If qdf.Name = strQuery Then CurrentDb.QueryDefs.Delete strQuery Exit For End If Next qdf Call Pause(3) dbsAlwaysOpen.QueryDefs.Refresh Set qryExcelFile = dbsAlwaysOpen.CreateQueryDef(strQuery, strSQL) Call Pause(3) dbsAlwaysOpen.QueryDefs.Refresh DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, strQuery, strPfad, True
Und hier noch die Pause() Funktion:
Public Function Pause(Pausenlänge As Long) On Error GoTo err_Pause: Dim Start, Ende As Long Pausenlänge = Pausenlänge ' Dauer festlegen. Start = Timer ' Anfangszeit setzen. Do While Timer < Start + Pausenlänge DoEvents ' Steuerung an andere Prozesse abgeben. Loop Ende = Timer ' Ende festlegen. exit_Pause: Exit Function err_Pause: MsgBox "Fehler: " & Err.Number & " " & Err.description Resume exit_Pause End Function
Wie Du siehst hatte ich mit so ähnlichen 'Blinkerfunktionen' zu tun.
Seitdem die Pausen eingebaut sind, läuft alles sehr zuverlässig.
Servus
Winfried
Gruppenrichtlinien
WSUS Package Publisher
HowTos zum WSUS Package Publisher
NNTP-Bridge für MS-Foren