Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1628to1632
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

VBA Textimport mit Schleife

VBA Textimport mit Schleife
02.07.2018 16:40:22
Jonas
Hallo Excel-Gemeinde,
ich hoffe einer der Profis kann mir weiter helfen!
Ich habe einen Unterordner mit 3 Textdateien, die alle gleich aufgebaut sind, und mit folgendem Script auf je ein Tabellenblatt importiert, nicht benötigte Spalten gelöscht und einzelne Werte auf einer Tabellenseite addiert werden.

  • Sub DAmakro()
    On Error Resume Next
    ' DAmakro Makro
    ' Import von 3 DA11-Dateien
    ' Tastenkombination: Strg+i
    With ActiveSheet.QueryTables.Add(Connection:= _
    "TEXT;" & ThisWorkbook.Path & "\Test\(1).d11" _
    , Destination:=Range("$A$1"))
    .Name = "(1)"
    .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 = xlFixedWidth
    .TextFileTextQualifier = xlTextQualifierDoubleQuote
    .TextFileConsecutiveDelimiter = False
    .TextFileTabDelimiter = True
    .TextFileSemicolonDelimiter = False
    .TextFileCommaDelimiter = False
    .TextFileSpaceDelimiter = False
    .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1)
    .TextFileFixedColumnWidths = Array(2, 10, 19, 6)
    .TextFileTrailingMinusNumbers = True
    .Refresh BackgroundQuery:=False
    End With
    ActiveCell.Range("A:A,C:C,E:E").Select
    ActiveCell.Offset(0, 4).Range("A1").Activate
    Selection.Delete Shift:=xlToLeft
    ActiveSheet.Name = "1"
    ActiveWorkbook.Worksheets.Add
    With ActiveSheet.QueryTables.Add(Connection:= _
    "TEXT;" & ThisWorkbook.Path & "\Test\(2).d11" _
    , Destination:=Range("$A$1"))
    .Name = "(2)"
    .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 = xlFixedWidth
    .TextFileTextQualifier = xlTextQualifierDoubleQuote
    .TextFileConsecutiveDelimiter = False
    .TextFileTabDelimiter = True
    .TextFileSemicolonDelimiter = False
    .TextFileCommaDelimiter = False
    .TextFileSpaceDelimiter = False
    .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1)
    .TextFileFixedColumnWidths = Array(2, 10, 19, 6)
    .TextFileTrailingMinusNumbers = True
    .Refresh BackgroundQuery:=False
    End With
    ActiveCell.Range("A:A,C:C,E:E").Select
    ActiveCell.Offset(0, 4).Range("A1").Activate
    Selection.Delete Shift:=xlToLeft
    ActiveSheet.Name = "2"
    ActiveWorkbook.Worksheets.Add
    With ActiveSheet.QueryTables.Add(Connection:= _
    "TEXT;" & ThisWorkbook.Path & "\Test\(3).d11" _
    , Destination:=Range("$A$1"))
    .Name = "(3)"
    .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 = xlFixedWidth
    .TextFileTextQualifier = xlTextQualifierDoubleQuote
    .TextFileConsecutiveDelimiter = False
    .TextFileTabDelimiter = True
    .TextFileSemicolonDelimiter = False
    .TextFileCommaDelimiter = False
    .TextFileSpaceDelimiter = False
    .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1)
    .TextFileFixedColumnWidths = Array(2, 10, 19, 6)
    .TextFileTrailingMinusNumbers = True
    .Refresh BackgroundQuery:=False
    End With
    ActiveCell.Range("A:A,C:C,E:E").Select
    ActiveCell.Offset(0, 4).Range("A1").Activate
    Selection.Delete Shift:=xlToLeft
    ActiveSheet.Name = "3"
    Worksheets("Zusammenfassung").Select
    Range("B2").Select
    ActiveCell.FormulaR1C1 = _
    "=IF(ISNA(VLOOKUP(RC[-1],'1'!C[-1]:C,2,0)),0,VLOOKUP(RC[-1],'1'!C[-1]:C,2,0))+IF(ISNA(   _
    _
    _
    VLOOKUP(RC[-1],'2'!C[-1]:C,2,0)),0,VLOOKUP(RC[-1],'2'!C[-1]:C,2,0))+IF(ISNA(VLOOKUP(RC[-1],'3'!  _
    _
    C[-1]:C,2,0)),0,VLOOKUP(RC[-1],'3'!C[-1]:C,2,0))"
    Range("B2").Select
    Selection.AutoFill Destination:=Range("B2:B1555"), Type:=xlFillDefault
    Range("B2:B1555").Select
    End Sub
    

  • So weit, so gut.
    Nun ist das ganze aber an die feste Anzahl der Dateien gebunden, fehlt eine, kommt eine nervige Fehlermeldung die weggeklickt werden muss und eine vierte Datei geht nur, wenn man das Script manuell erweitert.
    Gibt es eine Möglichkeit das ganze als Schleife zu bauen, so dass es egal ist ob 1,3 oder 20 Dateien in dem Untereordner liegen?
    Die Textdateien sind immer gleich aufgebaut und immer gleich aufsteigend benannt.

    1
    Beitrag zum Forumthread
    Beitrag zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: VBA Textimport mit Schleife
    02.07.2018 19:52:50
    Matthias
    Moin!
    Probire mal den Code. DAmit sollten am Anfang alle Dateien mit der Endung d11 gezählt werden. Anschließend wird dein Code für queritables so oft ausgeführt, wie Dateien da waren. Hoffe mal ich habe alles geändert.
    Sub DAmakro()
    On Error Resume Next
    ' DAmakro Makro
    ' Import von 3 DA11-Dateien
    ' Tastenkombination: Strg+i
    Dim fso As Object
    Dim anzahl As Long
    Dim durchlauf As Long
    Dim ordner As Object
    Dim datei As Object
    Set fso = CreateObject("Scripting.Filesystemobject")
    Set ordner = fso.getfolder(ThisWorkbook.Path)
    For Each datei In ordner.Files
    If fso.GetExtensionName(datei) = "d11" Then anzahl = anzahl + 1
    Next
    For durchlauf = 1 To anzahl
    With ActiveSheet.QueryTables.Add(Connection:= _
    "TEXT;" & ThisWorkbook.Path & "\Test\(" & durchlauf & ").d11" _
    , Destination:=Range("$A$1"))
    .Name = "(" & durchlauf & ")"
    .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 = xlFixedWidth
    .TextFileTextQualifier = xlTextQualifierDoubleQuote
    .TextFileConsecutiveDelimiter = False
    .TextFileTabDelimiter = True
    .TextFileSemicolonDelimiter = False
    .TextFileCommaDelimiter = False
    .TextFileSpaceDelimiter = False
    .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1)
    .TextFileFixedColumnWidths = Array(2, 10, 19, 6)
    .TextFileTrailingMinusNumbers = True
    .Refresh BackgroundQuery:=False
    End With
    ActiveCell.Range("A:A,C:C,E:E").Select
    ActiveCell.Offset(0, 4).Range("A1").Activate
    Selection.Delete Shift:=xlToLeft
    ActiveSheet.Name = durchlauf
    ActiveWorkbook.Worksheets.Add
    Next
    Worksheets("Zusammenfassung").Select
    Range("B2").Select
    ActiveCell.FormulaR1C1 = _
    "=IF(ISNA(VLOOKUP(RC[-1],'1'!C[-1]:C,2,0)),0,VLOOKUP(RC[-1],'1'!C[-1]:C,2,0))+IF(ISNA(  _
    _
    _
    _
    VLOOKUP(RC[-1],'2'!C[-1]:C,2,0)),0,VLOOKUP(RC[-1],'2'!C[-1]:C,2,0))+IF(ISNA(VLOOKUP(RC[-1],'3'!  _
    _
    _
    C[-1]:C,2,0)),0,VLOOKUP(RC[-1],'3'!C[-1]:C,2,0))"
    Range("B2").Select
    Selection.AutoFill Destination:=Range("B2:B1555"), Type:=xlFillDefault
    Range("B2:B1555").Select
    End Sub
    
    VG
    Anzeige

    299 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige