1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Beliebige Textdatei aus Ordner in Excel importieren (formatiert)

Dieses Thema im Forum "Visual Basic, Visual Basic for Applications (VBA) " wurde erstellt von Valentin Stemmler, 11. Mai 2018.

?

Beliebige Textdatei aus Ordner in Excel importieren (formatiert) möglich?

  1. Ja

    1 Stimme(n)
    100,0%
  2. Nein

    0 Stimme(n)
    0,0%
  1. Valentin Stemmler

    Valentin Stemmler New Member

    Hallo zusammen,

    ich bin gerade dabei für meine Abteilung eine Excel-Datei zu erstellen, die beim Öffnen direkt eine beliebige Textdatei in korrekter Formatierung einlesen kann. Die Textdatei ist hierfür in einem bestimmten Ordner, in dem nur diese eine Datei liegt und keine weitere. Die Datei, die eingelesen werden soll wird immer gegen eine neue Textdatei ausgetauscht.
    (Es handelt sich um Tabellen mit bis zu 87.000 Zeilen und ca. 20 Spalten)

    Ablauf:

    1. Textdatei wird aus einer Datenbank in den bestimmten Ordner gelegt und als #1.txt gespeichert
    2. Excel-Datei wird geöffnet
    3. Die Textdatei wird mit dem Öffnen direkt korrekt formatiert und importiert
    4. Excel-Datei wird mit korrektem Namen wieder gespeichert

    Ich muss hierbei folgendes beachten:

    Unicode UTF-8
    Trennzeichen |
    Textquali. {kein}


    Ich habe nun verschiedene Wege ausprobiert und der einfachste weg war für mich am Ende einfach ein Makro aufzuzeichnen:

    Ich möchte aber umgehen, dass ich die Datei immer speziell benennen muss. Aktuell heißt sie #1

    Gibt es hierfür eine Schreibweise, die eine Textdatei aus einem Ordner importieren kann ohne dem Festlegen eines bestimmten Dateipfades?

    Oder sollte hierfür noch so etwas wie ein Explorer eingefügt werden? (Habe hierfür leider keine Verknüpfung mit dem Code des Explorers und dem Code zum importieren einer Textdatei hinbekommen)

    Aktueller Code:
    Code Anfrage.PNG

    Ich bin leider erst Anfänger. Ich würde mich sehr über eure Hilfe freuen.

    Vielen Dank im Voraus.


    Freundliche Grüße

    Valentin Stemmler
  2. German

    German Well-Known Member c-b Experte

    Grundsätzlich funktioniert das schon.
    Code:
        Dim txtfile As Variant
        ' ChDrive ("C:\")
        ' ChDir ("\Users\stemmlerv\Desktop")
        txtfile = Application.GetOpenFilename(FileFilter:="Text-Dateien (*.txt), *.txt")
        If txtfile = False Then Exit Sub
      
        Workbooks.OpenText Filename:=(txtfile), Origin:=65001 ' etc. ...
    Du kannst vorbestimmen, in welchem Verzeichnis die Suche starten soll (siehe die beiden auskommentierten Zeilen am Anfang). Die GetOpenFilename Methode öffnet dir einen Auswahldialog.
    Du musst dann deinen Code für die OpenText Methode noch ergänzen (schreibe ich natürlich nicht von einer Bilddatei ab, du hast schließlich den Code vorliegen).
    Valentin Stemmler gefällt das.
  3. Valentin Stemmler

    Valentin Stemmler New Member

    @German VIELEN DANK! Funktioniert super!

    Code:
    Private Sub Workbook_open()
    
    Dim txtfile As Variant
    ChDrive ("C:\")
    ChDir ("\Users\stemmlerv\Desktop")
    txtfile = Application.GetOpenFilename(FileFilter:="Text-Dateien (*.txt), *.txt")
    If txtfile = False Then Exit Sub
    
    
    Workbooks.OpenText Filename:=(txtfile), Origin:=65001, StartRow _
            :=1, DataType:=xlDelimited, TextQualifier:=xlNone, ConsecutiveDelimiter _
            :=False, Tab:=False, Semicolon:=False, Comma:=False, Space:=False, _
            Other:=True, OtherChar:="|", FieldInfo:=Array(Array(1, 2), Array(2, 1), Array _
            (3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), Array( _
            10, 1), Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1), Array(15, 1), Array(16, 1), _
            Array(17, 1), Array(18, 1), Array(19, 1), Array(20, 1), Array(21, 1), Array(22, 1), Array( _
            23, 1), Array(24, 1), Array(25, 1), Array(26, 1), Array(27, 1), Array(28, 1), Array(29, 1), _
            Array(30, 1), Array(31, 1), Array(32, 1), Array(33, 1), Array(34, 1), Array(35, 1), Array( _
            36, 1), Array(37, 1), Array(38, 1), Array(39, 1), Array(40, 1), Array(41, 1), Array(42, 1), _
            Array(43, 1), Array(44, 1), Array(45, 1), Array(46, 1), Array(47, 1), Array(48, 1), Array( _
            49, 1), Array(50, 1), Array(51, 1), Array(52, 1), Array(53, 1), Array(54, 1), Array(55, 1), _
            Array(56, 1)), TrailingMinusNumbers:=True
           
    End Sub