Antwort 1 von Tomschi vom 13.12.2019, 20:16 Options
Halli Hallo!
M.O. hat mich in einem anderen Thread darauf aufmerksam gemacht, dass der obige Link offensichtlich Probleme bereitet. Daher hier kurz noch einmal meine Problemstellung:
Ich habe mit dem Makrorekorder zum Importieren einer txt-Datei folgenden Code kreiert:
Sub versuch()
'
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;C:\tmp\test\tom.txt", Destination:= _
Range("A1"))
.Name = "tom"
.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 = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileOtherDelimiter = ";"
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
End Sub
Da sich der Name der Importdatei (hier tom.txt) ändern kann und auch das Verzeichnis nicht immer C:\tmp\test\ lautet, suche ich eine Lösung den Pfad und den Dateinamen variabel zu gestalten.
Ich dachte da an eine Inputbox wie z. B.
fname = InputBox("Eingabe Pfad und Dateiname" & vbLf & _
"Standard = C:\tmp\text\rohdaten.txt" & vbLf & _
"", , "C:\tmp\text\rohdaten.txt")
Aber wie bekomme ich nun fname in den aufgezeichneten Code damit die Datei auch aufgerufen wird?
Kann man prüfen, ob der Pfad/die Datei überhaupt vorhanden ist?
Wenn nein, Hinweis (aber wie).
Schon mal DANKE für Lösungsvorschläge.
Ciao
Tom
Antwort 2 von Marie vom 13.12.2019, 23:15 Options
zum Beispiel so:
Gruß Marie
Sub versuch()
'
Dim strDatei As String
strDatei = InputBox("Bitte Pfad und Dateiname eingeben" _
, "Aber rasch", "C:/eigene Dateien/meinetxt.txt")
With ActiveSheet.QueryTables.Add(Connection:= _
strDatei, Destination:= _
Range("A1"))
Antwort 3 von Tomschi vom 14.12.2019, 07:25 Options
Guten Morgen Marie!
Danke für die Antwort!
Ich werde Deinen Vorschlag am WE gleich mal ausprobieren und mich dann wieder melden.
Hast Du zufällig auch einen Lösungsansatz für das Prüfen auf die Korrektheit des Pfades bzw. des Dateinamens?
Ciao
Tom
Antwort 4 von Tomschi vom 20.12.2019, 11:02 Options
Halli Hallo!
Leider komme ich erst jetzt dazu Dir mein „Testergebnis“ mitzuteilen.
Ich habe Deinen Code ein wenig verändern müssen:
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;fname
" _
Ohne
"TEXT, vor fname konnte ich das Makro (unter Office 2003) nicht zum Laufen bringen.
Bedauerlicherweise läuft das Makro aber noch immer nicht einwandfrei.
Laufzeitfehler ‚1004’:
Excel kann die Textdatei für die Aktualisierung des externen Datenbereichs nicht finden.
Vergewissern Sie sich, dass die Textdatei nicht verschoben oder umbenannt wurde.
Wiederholen Sie anschließend die Aktualisierung.Drückt man den Button Debuggen dann wird die Zeile
.Refresh BackgroundQuery:=False
markiert.
Vielleicht kann ja jemand damit etwas anfangen uns mir einen Lösungsvorschlag hier posten.
Unter
http://www.netupload.de/detail.php?img=8e050c8361503a76ab62598bb03a... habe ich eine zip-Datei mit den zwei Musterdateien abgelegt. Hoffe dieses Mal klappt alles.
Frohe Weihnachten!
Tom
Antwort 5 von coros vom 20.12.2019, 13:05 OptionsLösung
Hallo Tom,
Du darfst den Pfad, der in der Variablen "fname" steht, nicht in Anführungszeichen setzen. Ändere die Zeile
[b]With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;[u]fname[/u]" _[/b]
in
[b]With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT[u];" & fname [/u]_[/b]
dann sollte es gehen.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 6 von Tomschi vom 20.12.2019, 15:37 Options
Hi Oliver!
Das Genie Oliver alias Coros hat mal wieder zugeschlagen.
DANKE!!!
Unter Office 2003 läuft alles perfekt.
Bin aber gerade auf einem PC mit Office 2000 und da bekomme ich folgende Meldung:
Laufzeitfehler '5':
Ungültiger Prozeduraufruf oder ungültiges Argument.
Es gibt wohl Probleme mit dem Code-Teil
.TextFilePlatform = 1252
Hast Du diesbezüglich auch einen Tipp für mich?
Wenn nicht, dann zeichne ich unter Office 2000 nochmals das ursprüngliche Makro auf und vergleiche die Codes.
Generelle Frage:
Kann man schon beim Öffnen einer Datei die Excel-Version auslesen?
Der Dir dankbare
Tom
Antwort 7 von coros vom 20.12.2019, 18:27 Options
Hallo Tom,
die Einstellung (Dateiursprung), die bei Dir den Fehler verursacht und noch eine weitere (nachstehendes Minuszeichen für negative Zahlen), gibt es noch nicht unter Excel2000. Nachfolgend Dein Makro mit der Abfrage, um welche Excelversion es sich handelt und den dann entsprechend verwendeten Einstellungen.
Kopiere das Makro in ein StandardModul und starte es z.B. über eine Befehlsschaltfläche
Teste das Makro aber bitte in einer Testdatei und nicht gleich in Deiner Originaldatei.[b]Sub rps_rohdaten_import()
Dim fname As String
fname = InputBox("Bitte Pfad und Dateiname eingeben" & vbLf & _
"" & vbLf & _
"Standard = C:\tmp\probe.txt" & vbLf & _
"", "Info aus Makro --> rps_rohdaten_import", "C:\tmp\probe.txt")
Sheets("RPS-Rohdaten").Select
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;" & fname _
, Destination:=Range("A1"))
.Name = "probe"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
[u]If Application.Version = "9.0" Then
.TextFilePlatform = xlWindows
Else
.TextFilePlatform = 1252
.TextFileTrailingMinusNumbers = True
End If[/u]
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileOtherDelimiter = ";"
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
.Refresh BackgroundQuery:=False
End With
End Sub[/b]
In dem Makro siehst Du auch, wie man die Excelversion ermittelt (unterstrichene Teil), da ich damit die angesprochenen Einstellungen je nach Excelversion aktiviere.
Ich hoffe, Du kommst klar. Bei Fragen melde Dich.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 8 von Tomschi vom 21.12.2019, 07:39 Options
Guten Morgen Oliver!
DANKE, dass Du so rasch und kompetent auf meine Frage geantwortet hast. Ich werde den Code mal ausprobieren und nach den Weihnachtsfeiertagen mein Ergebnis hier posten.
Gibt es im www irgendwo eine Übersicht was sich wie von Office2000 auf Office2003 geändert hat?
Ciao
Tom
Antwort 9 von Tomschi vom 24.01.2020, 07:53 Options
Hi Oliver!
Leider habe ich es noch nicht geschafft Deinen Code (vor/nach meinem Urlaub) auszutesten. Sorry!
Bitte um etwas Geduld.
Bye
Tom