2017-08-17 1 views
1

Ich habe einen Code unten, die Daten aus allen Dateien im Verzeichnis importiert. Ich möchte die Dateneingabe nur auf TXT-Dateien beschränken. d. h. nur aus Textdateien importieren. Irgendeine Hilfe.Schleife durch nur Textdateien im Verzeichnis vorhanden Daten importieren vba mit

Sub ReadFilesIntoActiveSheet() 
    Dim fso As FileSystemObject 
    Dim folder As folder 
    Dim file As file 
    Dim FileText As TextStream 
    Dim TextLine As String 
    Dim Items() As String 
    Dim i As Long 
    Dim cl As Range 
    ' Get a FileSystem object 
    Set fso = New FileSystemObject 
    ' get the directory you want 
    Set folder = fso.GetFolder("D:\workdir\NX12IP25_RenewDaimler\textfiles\t") 
    Set cl = ActiveSheet.Cells(1, 1) 
    For Each file In folder.Files 
     Set FileText = file.OpenAsTextStream(ForReading) 
     Do While Not FileText.AtEndOfStream 
      TextLine = FileText.ReadLine 
      Items = Split(TextLine, "|") 
    cl.Value = folder & "\" & file.Name 
    For i = 0 To UBound(Items) 
     cl.Offset(0, i + 1).Value = Items(i) 
    Next 
      Set cl = cl.Offset(1, 0) 
     Loop 
     FileText.Close 
    Next file 
    Set FileText = Nothing 
    Set file = Nothing 
    Set folder = Nothing 
    Set fso = Nothing 
End Sub 

Antwort

2

Sie sollten If Aussage zu überprüfen, ob letzten 4 Zeichen .txt sind verwenden. Sie können es auf zwei Arten tun:

1) If Right(file.Name, 4) = ".txt" Then ...

oder

2) mit regulären Ausdrücken: If file.Name like "*.txt" Then ....

Ich ziehe es erste Lösung, die effizienter ist.

diesen Zustand prüfen sollte erste Operation, die Sie in Ihrer Schleife zu tun, so dass Sie Dateien weglassen würden, das nicht unsere Muster entspricht (in diesem Fall, dass keine Dateien sind Text).

+2

Wenn Sie nicht wollen, txt-Dateien auszuschließen, verwenden Sie 'Wenn Right (LCase (file.Name), 4) = ".txt" Then ...' – CLR

+0

ok. Ich möchte aus verschiedenen Ordnern importieren, aber während ich gehe importieren überschreibt er auf vorige Daten, wie kann ich Daten aus der nächsten leeren Zeile importieren? –

+1

Sie müssen die letzte verwendete Zeile ermitteln, die mit diesem Code ausgeführt werden kann: 'Cells (Rows.Count, Spalte) .End (xlUp) .Row', wobei' column' die Nummer einer Spalte angibt, für die Sie möchten Bestimmen Sie die zuletzt verwendete Zeile. –

2

Ihre Hauptschleife sollte wie folgt aussehen:

For Each file In folder.Files 
    If Right(LCase(file.Name), 4) = ".txt" Then 
     Set FileText = file.OpenAsTextStream(ForReading) 
     Do While Not FileText.AtEndOfStream 
      TextLine = FileText.ReadLine 
      Items = Split(TextLine, "|") 
      cl.Value = folder & "\" & file.Name 
      For i = 0 To UBound(Items) 
       cl.Offset(0, i + 1).Value = Items(i) 
      Next 
      Set cl = cl.Offset(1, 0) 
     Loop 
     FileText.Close 
    End If 
Next file 

Dies wird Dateien abholen Endung .txt , .TXT , tXt usw.

2

Sie können dies tun, indem Sie den Dateinamen Überprüfung direkt:

if LCase(Right(file.Name, 4) = ".txt") then 
... 

oder lassen Sie das Filesystem an die Arbeit für Sie

if LCase(fso.getextensionname(File.Path)) = "txt" then 
... 
1

Wenn Sie Text-Dateien sind darauf beschränkt, können Sie die DIR-Funktion verwenden, um die Dateifilter angeben. Calling Dir findet das erste Mal die erste Datei, die dem Suchmuster entspricht. Wenn Sie sie immer wieder aufrufen, werden die nächsten Dateien mit demselben Muster zurückgegeben, sodass Sie eine Schleife erstellen können, bis eine leere Zeichenfolge zurückgegeben wird.

Dim file As String 
file = Dir("D:\workdir\NX12IP25_RenewDaimler\textfiles\*.txt") 
Do Until file = "" ' Start the loop. 
    Set FileText = file.OpenAsTextStream(ForReading) 
    Do While Not FileText.AtEndOfStream 
     TextLine = FileText.ReadLine 
     Items = Split(TextLine, "|") 
     cl.Value = folder & "\" & file.Name 
     For i = 0 To UBound(Items) 
      cl.Offset(0, i + 1).Value = Items(i) 
     Next 
     Set cl = cl.Offset(1, 0) 
    Loop 
    FileText.Close 
    file = Dir() ' Getting next entry. 
Loop 
+0

Das wird nicht funktionieren. Sie können die 'file.OpenAsTextStream' nicht verwenden, wenn' file' eine Zeichenkette ist. – CLR

Verwandte Themen