Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
680to684
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
680to684
680to684
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Pfadangabe durch Variable ersetzen

Pfadangabe durch Variable ersetzen
11.10.2005 20:49:47
Korl
Hallo,
es muß immer wieder die selbe *.csv eingelesen werden. Da dies auf unterschiedliche Rechner erfolgt, sind unterschiedliche Pfade vorhanden. Um dieses nicht im Code ändern zu müssen, möchte ich eine Variable anlegen.
Diese soll die Pfadangabe aus dem Sheet("Einlesen").Rang("R6") holen.
Hier mal mein Code:

Sub Test()
Dim wksE As Worksheet
Dim Pfad As String
Set wksE = Worksheets("Einlesen")
Pfad = wksE.Range("R6")
If wksE.Range("A3") <> "" Then
Exit Sub
Else
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;Pfad", Destination:=Range("A1"))
xxx   '"TEXT;C:\Dokumente und Einstellungen\pc\Eigene Dateien\SBW2005.csv", _
xxx   'Destination:=Range("A1"))
.Name = "SBW2005"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = True
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
End If
End Sub


Um Schreibfehler zu vermeiden, habe ich den Pfad aus den Code in die Zelle kopiert.
Bei meiner Schrebweise wird die Datei nicht gefunden.
Die mit xxx gekennzeichneten Zeilen ist das Original und funzt.
Was mache ich falsch?
Gruß Korl

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Pfadangabe durch Variable ersetzen
11.10.2005 20:57:54
Ramses
Hallo
Schau dir mal die Funktion
Application.GetOpenFilename
an.
Damit vermeidest du Schreibfehler ;-)
Gruss Rainer
AW: Pfadangabe durch Variable ersetzen
11.10.2005 21:47:22
Korl
Hallo Rainer,
besten Dank für Deinen Denkanstoß. Jetzt bin ich soweit, das mir der Dateiexplorer geöffnet wird und ich mir die Datei auswählen kann.
Ich habe jetzt folgendes dazwischen gesetzt:
ChDrive Left(Pfad, 1)
ChDir Pfad
x = Application _
.GetOpenFilename("CSV Dateien (*.csv), *.csv")
If x = "Falsch" Then Exit Sub
und beginne mit:
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;Pfad & .csv", Destination:=Range("A1")
Obwohl ich die richtige Datei auswählen kann, sagt der Debugger, er kann die datei nicht finden.
Ich weis mir keinen Rat mehr.
Gruß Korl
Anzeige
AW: Pfadangabe durch Variable ersetzen
11.10.2005 21:49:49
Ramses
Hallo
With ActiveSheet.QueryTables.Add(Connection:= "TEXT;" & Pfad & ".csv", Destination:=Range("A1")
Danach sollte es laufen
Gruss Rainer
AW: Pfadangabe durch Variable ersetzen
11.10.2005 22:50:13
Korl
Hallo Rainer,
nochmal schönen Dank für Deine Mühe. Ich habe immer noch die gleiche Fehlermeldung.
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & Pfad & ".csv", Destination:=Range("A1"))
.Name = "SBW2005"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = True
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
xxxxx .Refresh BackgroundQuery:=False
End With
Die mit xxxx gekennzeichnete Zeile wird vom Debugger gelb gekennzeichnet. Und findet die Textdatei noch immer nicht. :-(
Gruß Korl
Anzeige
AW: Pfadangabe durch Variable ersetzen
11.10.2005 23:45:50
Korl
Hallo Rainer,
ich habe jetzt mein Code am laufen bekommen.Nach dem ich noch mal den Recorder bemüht habe.
Jetzt sieht der Code so aus:
wksE.Range("A1").Select
With Selection.QueryTable
.Connection = "TEXT;" & Pfad & "SBW2005.csv"
.TextFilePlatform = 850
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = True
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
Mit diesem Code bin ich, obwohl die Datei nach Wunsch aus dem Öffnen-Explorer ausgesucht wird, trotzdem daran gebunden im Code den genauen Dateinamen anzugeben.
Läßt sich dieser Effekt noch verhindern?
Gruß Korl
Anzeige
AW: Pfadangabe durch Variable ersetzen
12.10.2005 09:10:55
René
Hi,
kann es sein dass du einen normalen Öffnen Dialog meinst, mit dem man dann den Pad und dateinamen bekommt?
strFileName = Application.GetOpenFilename("CSV Files (*.csv), *.csv")
strFolders = Split(strFileName,"\")
strFileName = Ubound(strFolders)
in StrFileName steht nun der alleinige Dateiname der zuvor ausgewählen Datei...
meinst du das?
AW: Pfadangabe durch Variable ersetzen
12.10.2005 15:28:35
Korl
Hallo Rene,
erstmal Danke für Deine Bereitschaft und Mühe. Dein Gedanke ist genau der meinige.
Ich bin wieder ein Schritt weiter gekommen, nur so ganz genau weis ich nun nicht wo ich Deine Variablen einbauen muß.
Eigentlich entspricht der Code schon meinen Vorstellungen, was mich nun aber stutzig macht, ist, das nur das File mit einen bestimmten Namen angenommen wird.
In meinem Fall wird nur die "SBW2005.csv" geöffnet. Benenne ich diese um, läßt sie sich nicht öffnen?
Hier nochmal mein Code:

Sub Test()
Dim wksE As Worksheet
Dim x As String
Dim Pfad As String, strFileName As String, strFolders As String
Set wksE = Worksheets("Einlesen")
Pfad = wksE.Range("R6")
strFileName = Application.GetOpenFilename("CSV Files (*.csv), *.csv")
'strFileName = UBound(strFolders)
' strFolders = Split(strFileName, "\")
ChDrive Left(Pfad, 1)
ChDir Pfad
strFileName
If strFileName = "Falsch" Then Exit Sub
On Error Resume Next
Application.ScreenUpdating = False
wksE.Range("A1").Select
With Selection.QueryTable
.Connection = strFileName                   ' "SBW2005.csv"
.TextFilePlatform = 850
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = True
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
'  Call Verarbeitung
Application.ScreenUpdating = True
End Sub

Ich kann in meinen Code nicht entdecken, das der Filename "SBW2005.csv" sein muß.
Kannst Du mir wohl nochmal weiter helfen?
Gruß Korl
Anzeige
AW: Pfadangabe durch Variable ersetzen
12.10.2005 16:03:36
Korl
Hallo,
jetzt verstehe ich nichts mehr. Wenn ich aus meinem Code "On Error Resume Next" heraus nehme bleibt der Debugger stehen in dieser Zeile:
" .Connection = strFileName"
Wenn ich On Error Resume Next aktiviere, wird mein File "SBW2005.csv" geladen, bennene ich diese wiederum um, wird sie nicht geladen.
Das ist für mich ein sehr seltsames Verhalten. :-)
Weis noch jemand Rat?
Gruß Korl

AW: Pfadangabe durch Variable ersetzen
13.10.2005 11:54:17
Korl
Ein Hallo an alle Beteiligten,
mein Problen hat sich gelöst mit folgenden Code von Bernd, Nichname "bst"

Sub LiesCSV1()
Dim neudatei
neudatei = Application.GetOpenFilename(filefilter:="Textdateien (*.csv), *.csv")
If neudatei = False Then Exit Sub
' Bei Bedarf: Neue Tabelle anlegen
Worksheets.Add
' LeseFunktion aufrufen
ReadfromCSVSimple CStr(neudatei)
End Sub

'
' Öffnet eine CSV-Datei und liest sie in die aktuelle Tabelle ab Zeile 1 Spalte 1
'
' fName = Dateiname & Pfad
' FS = das Spaltentrennzeichen (Field Seperator), im Deutschen ein Semikolon
'

Sub ReadfromCSVSimple(fname As String, Optional FS As String = ";")
Dim hfile As Integer ' Filehandle bzw. Dateinummer
Dim i As Long ' Zähler über alle Zeilen
Dim j As Integer ' Zähler über alle Spalten
Dim OneLine As String ' Eine Zeile als String
Dim myArr As Variant ' eine Zeile in Felder getrennt
hfile = FreeFile
Open fname For Input As #hfile
While Not EOF(hfile)
i = i + 1
Line Input #hfile, OneLine
myArr = Split(OneLine, FS)
' With Range(Cells(i, 1), Cells(i, 1 + UBound(myArr)))
' .NumberFormat = "@"
' .Value = myArr
' End With
For j = 0 To UBound(myArr)
Cells(i, 1 + j).NumberFormat = "@"
Cells(i, 1 + j).Value = myArr(j)
Next
Wend
Close #hfile
End Sub

Schöne Grüße
Korl
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige