2 Stimmen

Excel-Textdatei-Import (bestimmte Spalten) in eine Tabelle mit VBA

Ich habe dieses Forum gefunden, als ich versuchte, meinen VBA-Code zu sortieren. Ich habe bisher nur sehr wenig Erfahrung in der VBA-Programmierung. Deshalb habe ich seit zwei Tagen nach einer Lösung für mein Problem gesucht, bisher ohne Erfolg. Allerdings bin ich sehr daran interessiert, meine Programmierkenntnisse zu verbessern und ich hoffe, dass Sie mir dabei helfen können.

Grundsätzlich möchte ich eine TXT-Datei in die aktive Excel-Arbeitsmappe importieren, Blatt mit dem Namen "DataImport", am Ende der Tabelle mit dem Namen "TblDataImport".

Die TXT-Datei besteht aus 13 Spalten, die durch Tabs getrennt sind:

  1. Zeile: Unternehmensname
  2. Zeile: Datum Name Kundengruppe Kundennummer Auftragsnummer Artikelnummer Artikelgruppe Linienstatus Menge Preis Rabatt Rabattprozentsatz Nettobetrag
  3. Zeile: Alle entsprechenden Werte...

Ich muss die erste und die zweite Zeile nicht importieren, da die Tabelle, in die ich die Daten importieren möchte, bereits vorhanden ist, einschließlich Überschriften. Außerdem benötige ich nur 7 der 13 Spalten, die fett formatiert sind. Es wäre perfekt, wenn der Benutzer die Textdatei über einen Datei-Öffnen-Dialog auswählen könnte.

Wenn ich die TXT-Datei manuell öffne und ihren Inhalt in Excel einfüge, wird er bereits in die richtigen Spalten eingefügt. Es sollte also keine Probleme mit der Formatierung geben.

Ich bin gespannt auf die Lösungen, die Sie finden.

Mit dem Makrorekorder kann ich nur einige meiner Bedingungen erfüllen:

Sub DataImport()  
' DataImport Makro  
    Sheets("DataImport").Select  
    With ActiveSheet.QueryTables.Add(Connection:= _  
        "TEXT;C:\Users\Sales.txt", Destination:=Range _  
        ("$A$1"))  
        .Name = "AxaptaSales"  
        .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 = False  
        .TextFileCommaDelimiter = False  
        .TextFileSpaceDelimiter = False  
        .TextFileColumnDataTypes = Array(4, 1, 9, 9, 1, 9, 9, 9, 1, 1, 1, 9, 1)  
        .TextFileTrailingMinusNumbers = True  
        .Refresh BackgroundQuery:=False  
    End With  
End Sub  

Dieser Code fügt jedoch alle Spalten nur in Zelle A1 ein (nicht am Ende der Tabelle). Außerdem enthält er die erste und zweite Zeile sowie die Spalten, die ich nicht benötige.

0voto

Gazza Punkte 95

Wenn Sie das Folgende zum obigen Code hinzufügen, wird dies dem bereits vorhandenen Daten im Arbeitsblatt hinzugefügt

Sub Datenimport()

   Dim LetzteZeile Als Integer
   Dim LetzteZeile2 Als integer
    LetzteZeile = Range("A65536").End(xlup).Row
    LetzteZeile = LetzteZeile + 1  
 ' Datenimport Makro  
Sheets("Datenimport").Select  
With ActiveSheet.QueryTables.Add(Connection:= _  
    "TEXT;C:\Benutzer\Vertrieb.txt", Destination:=Range _  
    ("$A" & LetzteZeile))  
    .Name = "AxaptaVertrieb"  
    .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 = False  
    .TextFileCommaDelimiter = False  
    .TextFileSpaceDelimiter = False  
    .TextFileColumnDataTypes = Array(4, 1, 9, 9, 1, 9, 9, 9, 1, 1, 1, 9, 1)  
    .TextFileTrailingMinusNumbers = True  
    .Refresh BackgroundQuery:=False  
End With
Range("A" & LetzteZeile & ":A" & LetzteZeile + 1).EntireRow.Delete
LetzteZeile2 = Range("A65536").End(xlup).Row
Range("H" & LetzteZeile & ":M" & LetzteZeile2).EntireColumn.Delete  

End Sub

Ich denke, das sollte wie von Ihnen gewünscht funktionieren (aber ich bin selbst noch ein Anfänger)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X