online 1
gast (50)

/ Forum / Tabellenkalkulation

TabellenkalkulationTabellenkalkulation

Fragevon Tomschi vom 10.12.2019, 07:48 Options

Lösung

VBA - Import mit Pfadangabe (Inputbox)

Wunderschönen guten Morgen!

Vielleicht können mir die Experten mal wieder weiterhelfen.
Ich möchte gerne per Inputbox den Importpfad einer Datei angeben. Irgendwie komme ich aber nicht weiter.
(siehe auch Musterdatei unter http://www.netupload.de/detail.php?img=7f078b603f1a05d3aca1a6c75ebb...)

Danke!

Tom


Antwort schreiben

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

Lö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

Ähnliche Themen

Abfrage auf ABBRUCH in InputBox
user3  04.05.2007 - 165 Hits - 11 Antworten

VBA InputBox Problem
Larrikin  13.06.2007 - 40 Hits - 2 Antworten

VBA - Inputbox
Tomschi  14.10.2007 - 170 Hits - 3 Antworten

inputbox VBA code ändern
aeberhard  24.11.2007 - 134 Hits - 2 Antworten

VBA - Pfadangabe
Tomschi  10.06.2008 - 96 Hits - 6 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Thu Jan 8 21:07:44 2026