Hallo zusammen,
ich verwende den Befehl Docmd.TransferText.
Dieser liefert zeitweise den Laufzeitfehler 2046 "Der Befehl oder die Aktion TransferText' steht momentan nicht zur Verfügung."
Wann / Warum steht dieser Befehl nicht zur Verfügung?
Wenn ich debuggen wähle, kann ich den Code ohne Änderung laufen lassen, und er macht alles wunschgemäß.
Hier der Code:
Public Sub t()
Const TmpLink = "tmptabImport"
Const ImportSpez = "TxtTemperaturImportSpezifikation"
Const ZuImportierendeDatei = "D:\Access\txttemperatur.txt"
Const extAufruf = "cmd /c D:\externesProgramm.exe"
' Das externe Programm erzeugt eine Textdatei: ZuImportierendeDatei = "D:\Access\txttemperatur.txt"
WaitShell extAufruf, vbMinimizedNoFocus, 120, True 'Nach 2 Minuten würde es zwangsweise weitergehen, auch wenn der Prozess noch läuft, dann wäre mir ein Folgeproblem plausibel, der Prozess läuft aber nicht so lange.
' die temporäre Access-Tabelle wird falls vorhanden gelöscht (wird durch Importroutine neu erstellt)
On Error Resume Next
DoCmd.DeleteObject acTable, TmpLink
On Error GoTo 0
' testweise 5 Sek warten, damit keine Zugriffsprobleme auftauchen sollen, hat auch nichts gebracht
Wait 5000
' Tabelle importieren
DoCmd.TransferText acLinkDelim, ImportSpez, TmpLink, ZuImportierendeDatei
' ... weiterer Code
End Sub
WaitShell ist zu finden unter http://dbwiki.net/wiki/VBA_Tipp:_Pro...ndigung_warten
Wie bekomme ich heraus, warum die Importfunktion manchmal nicht funktioniert?
Die einzulesende Datei wird nur von dem erzeugenden externen Programm und dieser Prozedur verwendet. Sogar den Virenscanner kann ich ausschließen.
Vielen Dank für mögliche Ideen.
Freundliche Grüße
Frank
Hallo,
villeicht hilft es, den Link vor dem Aufruf des ext. Programms zu löschen...
und auch mal das on error resume next entfernen und einen allgemeinen Errorhandler einbauen, damit man sieht, was Sache ist..
Hallo Franz,
Zitatvilleicht hilft es, den Link vor dem Aufruf des ext. Programms zu löschen
hatte ich probiert, hat aber keinen Effekt.
Zitatdas on error resume next entfernen und einen allgemeinen Errorhandler einbauen, damit man sieht, was Sache ist
Das on 'error resume next' greift nur für die eine Zeile, dann wird durch
'On Error GoTo 0' die Standardbehandlung eingeschaltet.
Zur Zeit prüfe ich den Fehlercode mit einer Logdatei. Mehr als 90% der Fälle laufen fehlerfrei durch. Aber machmal bleibt er hängen, und ich bekomme nicht heraus, weshalb.
Hallo,
"Das on 'error resume next' greift nur für ......"
das ist mir nicht neu.. :P
Ich habe trotzdem das "Gefühl", dass es an der noch aktiven Verlinkung liegt. Leg das Löschen weiterhin vor den Aufruf und setz gleich danach
Application.RefreshDatabaseWindow
ein.
Hallo Franz,
ich wollte nicht bestreiten, das du die Fehlerbehandlung kennst; mir ist nur der Grund nicht klar, weil nur eine Meldung unterdrückt wird, die ich auch unterdrücken möchte.
Application.RefreshDatabaseWindow kannte ich noch nicht. Habe mir mal die Doku dazu angesehen, sieht interessant aus.
Umgesetzt und der Test läuft.
Vielen Dank schon mal für den Ansatz.
Freundliche Grüße
Frank
Hallo Franz,
der Test war erfolgreich! Deine Vermutug war goldrichtig.
Vielen Dank und viele Grüße
Freundliche Grüße
Frank