2016-06-15 11 views
2

Ich habe einen Code, der Dateien im Ordner von .txt (mit Trennzeichen "|) zu xslx, konvertieren Aber der Code funktioniert gut für einige Dateien (wenn ich es in Excel öffnen), die anderen sind falsch, wenn ich versuche, die wring manuell von excel ribbon (Hole externe daten -> aus text) zu importieren, sind die dateien korrekt.VBA Convert Trennzeichen Textdatei in Excel

Dies ist mein Code:

Sub tgr() 

    Const txtFldrPath As String = "C:\...\txtFiles"  
    Const xlsFldrPath As String = "C:\excelFiles"  

    Dim CurrentFile As String: CurrentFile = Dir(txtFldrPath & "\" & "*.txt") 
    Dim strLine() As String 
    Dim LineIndex As Long 

    Application.ScreenUpdating = False 
    Application.DisplayAlerts = False 
    While CurrentFile <> vbNullString 
     LineIndex = 0 
     Close #1 
     Open txtFldrPath & "\" & CurrentFile For Input As #1 
     While Not EOF(1) 
      LineIndex = LineIndex + 1 
      ReDim Preserve strLine(1 To LineIndex) 
      Line Input #1, strLine(LineIndex) 
     Wend 
     Close #1 

     With ActiveSheet.Range("A1").Resize(LineIndex, 1) 
      .Value = WorksheetFunction.Transpose(strLine) 
      .TextToColumns Other:=True, OtherChar:="|" 
     End With 

     ActiveSheet.UsedRange.EntireColumn.AutoFit 
     ActiveSheet.Copy 
     ActiveWorkbook.SaveAs xlsFldrPath & "\" & Replace(CurrentFile, ".txt", ".xlsx"), xlOpenXMLWorkbook 
     ActiveWorkbook.Close False 
     ActiveSheet.UsedRange.ClearContents 

     CurrentFile = Dir 
    Wend 
    Application.DisplayAlerts = True 
    Application.ScreenUpdating = True 
End Sub 

enter image description here dieses Bild das Ergebnis in Excel zeigen und die Originaldatei .txt

+1

Und der Fehler -doesn't die Datei öffnen? Begrenzt es nicht? Limit-Größe ist nicht das Gleiche - Die Syntax scheint mir richtig zu sein. – Sgdva

+0

@Sgdva, ich füge ein Bild hinzu. – BKChedlia

+0

Sind die "falschen" Dateien aus einer anderen Quelle? –

Antwort

2

Zunächst einmal, Sie haben schlechte Daten. Zwischen besteht ein Tabulatorzeichen. Die gesamten Verbindlichkeiten und 30.619.676,00 in AI060616.txt. Excel mag Tabs im Zelleninhalt nicht. In der Tat ist die Standardtrennzeichen auf einem TextToColumns Befehl das Tabulatorzeichen ist, und dies führt zu zwei Datenspalte, wenn die Anordnung in gebracht wird.

Open txtFldrPath & "\" & CurrentFile For Input As #1 
    While Not EOF(1) 
     LineIndex = LineIndex + 1 
     ReDim Preserve strLine(1 To LineIndex) 
     Line Input #1, strLine(LineIndex) 
     'STRIP TABS OUT AND REPLACE WITH A SPACE!!!!! 
     strLine(LineIndex) = Replace(strLine(LineIndex), Chr(9), Chr(32)) 
    Wend 
    Close #1 

nächstes wird der Range.TextToColumns method ‚erinnert‘ sich alle Einstellungen, die verwendet wurden das letzte Mal wurde es durchgelaufen; Es spielt keine Rolle, ob dies vom Benutzer auf dem Arbeitsblatt oder über VBA getan wurde. Sie benötigen viel mehr Parameter als Sie angegeben haben, um zu gewährleisten, dass es so funktioniert, wie Sie es möchten.

With ActiveSheet.Range("A1").Resize(LineIndex, 1) 
     .Value = WorksheetFunction.Transpose(strLine) 
     'DEFINE THE OPERATION FULLY!!!! 
     .TextToColumns Destination:=.Cells(1), DataType:=xlDelimited, _ 
         TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, _ 
         Tab:=False, Semicolon:=False, Comma:=False, Space:=False, _ 
         Other:=True, OtherChar:="|" 
    End With 

import_TXT

+0

Dank @Jeeped, löste es mein Problem ... – BKChedlia

+0

@BKChedlia vergessen Sie nicht, die grüne Markierung zu überprüfen, um die Antwort zu akzeptieren! – Sgdva

1

Während ich noch die Lösung/das Problem nicht verstehen, ist es, dass es scheint gelöst wird, wenn Sie die .TextToColumns Methode zweimal anwenden:

With ActiveSheet.Range("A1").Resize(LineIndex, 1) 
    .Value = WorksheetFunction.Transpose(strLine) 
    .TextToColumns Other:=True, OtherChar:="|" 
    .TextToColumns Other:=True, OtherChar:="|" 
End With 

Vielleicht hat jemand anderes zu klären, warum das ist . Dies ist zwar nicht die Art von Post, die ich normalerweise zur Verfügung stelle, aber das obige sollte Ihnen einen Workaround bieten, während jemand anderes eine bessere Lösung (einschließlich einer Erklärung) vorschlägt.

+0

Es ist nicht das Problem, das Problem ist, dass die "rohen" Daten 2 Spalten haben, kann Excel nicht abgrenzen, wenn Quelldaten 2 Spalten hat. – Sgdva

+0

Auch die Lösung ist ein Workaround, die Daten sind kompromittiert, wahrscheinlich wäre der beste Weg, die "rohen" Daten zu beheben, so dass die Grenze ordnungsgemäß funktionieren kann. – Sgdva

1

Die Datei AI150616 hat in der Spalte "B" die Daten 30,619,676.00 Net worth = ZAR 83,456,466.00 Hence, final required BG should be (63,503,915.82)
enter image description here Delimiter nur mit einer Spalte funktioniert. Sollte das zulässig sein? Wenn nicht, ist möglicherweise eine andere Prozedur erforderlich, um zu überprüfen, ob die Daten korrekt sind, wenn dies der Fall ist, fügen Sie sie an, andernfalls warnen Sie, dass die Benutzerdaten irgendwie kompromittiert wurden.

+1

Der Dateitext ist das Problem ... Der Client sendet Daten an die DB und wir extrahieren Daten in .txt, ich habe das in den Daten nicht gesehen, das ist ein Tab, und die Extraktion wurde von Pipes gemacht ... sowieso, Die obige Lösung löste das Problem. danke alle – BKChedlia