HERBERS Excel-Forum - das Archiv

Thema: VBA Anwendungs- oder objekdefinierter Fehler '1004'

VBA Anwendungs- oder objekdefinierter Fehler '1004'
bustue
Hallo Freunde,
ich habe in einem Arbeitsblatt folgenden Code:
Sub IMPORT5_NAR()

Dim sPath As String
Dim sFile As String
sPath = "Z:\L-Preise-2024\ALIAS 70127\"
'Namen anpassen
sFile = Dir(sPath & "*-2024*.txt")
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;" & sPath & sFile, Destination:=Range("J2"))
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 1252
.TextFileStartRow = 3
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = True
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 9, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
End Sub


Der hat bisher einwandfrei funktioniert. Plötzlich erhalte ich die Fehlermeldung bei :Refreh BackgroundQuery:=False - Anwendungs- oder objektdefinierter Fehler.
Kann mir jemand helfen.

Mit freundlichen Grüßen
Burghard
AW: VBA Anwendungs- oder objekdefinierter Fehler '1004'
MCO
Moin!

Da du im Code nichts geändert hast, vermute ich, dass Pfad / Datei nicht mehr stimmen.
Überprüf das mal.

Gruß, MCO
AW: VBA Anwendungs- oder objekdefinierter Fehler '1004'
Yal
Hallo Burghard,

es könnte daran liegen, dass Du "QueryTables.Add" verwendest: ist eine QueryTable in J2 bereits vorhanden, wird der code nicht in der Lage eine neue QueryTable zu erzeugen, und somit zu refreshen.
Falls das, das Problem ist (aus der Ferne...), dann musst Du den Code so umbauen, dass er testet, ob bereits eine QT vorliegt. Idealerweise mit einem fixierten Namen.

Sub IMPORT5_NAR()

Dim sFile As String
Dim QT As QueryTable
Const cPath = "Z:\L-Preise-2024\ALIAS 70127\"
Const cQueryName = "myQuery"

'prüfen, ob bereits vorhanden
On Error Resume Next 'Fehlertoleranz einführen
Set QT = ActiveSheet.QueryTables(cQueryName)
On Error GoTo 0 'Fehlertoleranz zurücknehmen

If QT Is Nothing Then
'wenn nicht vorhanden, erzeugen
sFile = Dir(cPath & "*-2024*.txt")
Set QT = ActiveSheet.QueryTables.Add(Connection:="TEXT;" & cPath & sFile, Destination:=Range("J2"))
With QT
.Name = cQueryName 'WICHTIG
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 1252
.TextFileStartRow = 3
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = True
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 9, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
Else
'wenn vorhanden, nur refresh
QT.Refresh
End If
End Sub


Es gäbe auch die Möglichkeit zu testen, ob in Zelle J2 eine QT aktiv ist. Siehe bitte dafür die Onlinehilfe.
Wenn eine QT bereits existiert, brauchst Du VBA nicht mehr: einfach auf die QT rechtsklicken und "Aktualisieren" auswählen.

VG
Yal
AW: VBA Anwendungs- oder objekdefinierter Fehler '1004'
bustue
Hallo Yal,
vielen Dank für Deinen Beitrag,
er hat mich um Vieles schlauer gemacht.
Vor allem ist Dein Code eine tolle Lösung für auch zukünftige Probleme dieser Art.
VG
Burghard
AW: VBA Anwendungs- oder objekdefinierter Fehler '1004'
daniel
Hi
der erste Ansatz wäre mal zu prüfen, ob Pfad- und Dateiname noch stimmen und ob die Datei überhaupt vorhanden ist.
also einfach mal diese Prüfung nach sFile = Dir(sPath & "*-2024*.txt") einbauen:

sFile = Dir(sPath & "*-2024*.txt")

if sFile = "" then
msgbox "Datei nicht vorhanden, bitte Pfad- und Dateinamen prüfen"
end
end if


ansonsten müsstest du mal schauen, ob sich irgendwas in der zwischenzeit verändert hat.
Gruß Daniel
AW: VBA Anwendungs- oder objekdefinierter Fehler '1004'
bustue
Hallo Daniel,
vielen Dank für Deinen Hinweis,
der Codeschnipsel wird mir in der Zukunft weiterhelfen, um solche Fehler zu vermeiden.
VG
Burghard