Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1332to1336
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
Inhaltsverzeichnis

Leere Textdateien beim import ignorieren

Leere Textdateien beim import ignorieren
25.09.2013 13:02:59
Andi
Hallo zusammen,
ich soll eine Excel-Datei so ändern, damit das Arbeiten einfacher und schneller wird.
Mit Hilfe des Internets, Kollegen und des Makrorecorders habe ich das auch geschafft, bis auf einen letzten Punkt und da erhoffe ich mir Hilfe von hier aus dem Forum.
Ich kann per VBA mehrere txt.-Dateien importieren. Funktioniert einwandfrei. Bloß leider kann es sein dass auch Dateien vorhanden sind, die ab Zeile 8 (ab da werden Daten importiert), nicht steht. Die Datei ist also leer. Trotzdem schreibt mir Excel für jede leere Datei eine leere Zeile. Das möchte ich verhindern, indem solche Dateien ignoriert werden.
Löschen der leeren Zellen funktioniert nicht, da Zellbezüge darauf sind.
Meine Frage: kann der vorhandene Code so abgeändert / erweitert werden, dass leere Dateien ignorirt werden?
Hier der Code:
Dim i As Long
Dim vFileToOpen As Variant
Dim lrow As Long
Dim SL As Object
Set SL = CreateObject("System.Collections.sortedlist")
ChDrive "G:"
ChDir "G:\Messdaten"
vFileToOpen = Application.GetOpenFilename("Text Files (*.txt*), *.txt", , , , True)
If Not IsArray(vFileToOpen) Then Exit Sub
For i = 1 To UBound(vFileToOpen)
SL(vFileToOpen(i)) = SL(vFileToOpen(i))
Next
For i = 1 To SL.Count
lrow = lrow + 1
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & SL.Getkey(i - 1), Destination:=Cells(lrow, 1))
.Name = SL.Getkey(i - 1)
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = False
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 1252
.TextFileStartRow = 8
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = True
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, _
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, _
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
lrow = Cells(Rows.Count, 1).End(xlUp).Row
Next
Ich wäre überglücklich, falls es möglich wäre.
Danke im voraus
Andi

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Poste bitte zwei Beispiel-Textdateien
25.09.2013 13:55:26
NoNet
Hallo andi,
Kannst Du uns bitte zwei Beispiel-Textdateien (je eine mit und eine ohne Inhalt ab Zeile 8) zur Verfügung stellen ? Dann ist das sicherlich möglich.
Gruß, NoNet
Hast Du Interesse, andere Excel-Begeisterte kennenzulernen ? - Dann komme zum
Exceltreffen 11.-13.10.2013 in Duisburg

http://www.exceltreffen.de/index.php?page=230
Schau doch mal rein !

Anzeige
Textdateien mit mehr als 8 Zeilen importieren
25.09.2013 16:12:57
NoNet
Hallo Andi,
ich hoffe, SO passt das Makro :
Option Explicit
Sub importFile()
Dim i As Long, j As Long
Dim vFileToOpen As Variant
Dim lrow As Long
Dim SL As Object
Set SL = CreateObject("System.Collections.sortedlist")
Dim objFSO As Object, objFile As Object, objTS As Object, strT As String
Set objFSO = CreateObject("Scripting.FileSystemObject")
ChDrive "G:"
ChDir "G:\Messdaten"
'ChDrive "C:"
'ChDir "C:\Temp"
vFileToOpen = Application.GetOpenFilename("Text Files (*.txt*), *.txt", , , , True)
If Not IsArray(vFileToOpen) Then Exit Sub
For i = 1 To UBound(vFileToOpen)
SL(vFileToOpen(i)) = SL(vFileToOpen(i))
Next
i = 0: j = 0
For j = 1 To SL.Count
Set objFile = objFSO.GetFile(vFileToOpen(j))
Set objTS = objFile.OpenAsTextStream(1, 0)
strT = objTS.Readall
objTS.Close
If UBound(Split(strT, vbLf)) > 8 Then
i = i + 1
lrow = lrow + 1
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & SL.Getkey(j - 1),  _
Destination:=Cells(lrow, 1))
.Name = SL.Getkey(j - 1)
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = False
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 1252
.TextFileStartRow = 8
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = True
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, _
_
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, _
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2) _
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
lrow = Cells(Rows.Count, 1).End(xlUp).Row
End If
Next
End Sub
Salut, NoNet

Anzeige
If UBound(Split(strT, vbLf)) > 8 Then
25.09.2013 22:10:27
Rudi
Hallo NoNet,
korrekterweise >6, da die 1.Datenzeile in Zeile 8 ist, somit UBound(...) min. 7 sein muss, da 0-basiert.
Ansonsten ist ja deine Lösung quasi identisch zu meiner, nur eben integriert.
Gruß
Rudi

AW: Leere Textdateien beim import ignorieren
25.09.2013 15:37:52
Rudi
Hallo,
.....
For i = 1 To SL.Count
If CheckFile(SL.Getkey(i - 1)) Then
lrow = lrow + 1
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & SL.Getkey(i - 1), Destination:=Cells( _
lrow, 1))
lrow = Cells(Rows.Count, 1).End(xlUp).Row
End If
Next

Function CheckFile(strFile As String) As Boolean
Dim fs As Object, fi As Object, ts As Object
Dim t, i, a
Set fs = CreateObject("scripting.filesystemobject")
Set fi = fs.getfile(strFile)
Set ts = fi.openastextstream
t = Split(ts.readall, vbCrLf)
CheckFile = UBound(t) > 6
End Function

Gruß
Rudi

Anzeige
AW: Leere Textdateien beim import ignorieren
26.09.2013 14:21:24
Andi
Hallo,
danke für die schnelle Hilfe.
Der Code von "NoNet" hat nicht ganz gepasst, da beim Import nur noch die zuerst angeklickte Datei importiert wurde.
Ich habe den Code von "Rudi Maintaire" verwendet und eingebunden und es funktioniert einwandfrei.
Danke vielmals.
Andi

Fehler nicht nachvollziehbar
26.09.2013 17:48:22
NoNet
Hey Andi,
schön, dass es nun mit Rudis Code "passt" :-). Deinen Satz kann ich allerdings nicht nachvollziehen :
...da beim Import nur noch die zuerst angeklickte Datei importiert wurde.

Mit meinen Test-Dateien wurden alle ausgewählten, die 8 oder mehr Zeilen haben (siehe Rudis Einwand bzgl. "8 Zeilen") auch importiert !
Sei's drum,
Salut, NoNet
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige