2016-03-29 5 views
1

Ich listet alle CSV-Dateien in einem Verzeichnis auf, öffne sie einzeln und lege "Text To Columns" an, dann speichere ich jede Datei als .xlsx. Um Dateien zu öffnen, die ich benutze:Wie Sie einen Workbooks.Open() Befehl auf CSV-Dateien in VBA anwenden?

Workbooks.Open (directory & fileName) 

Wo Verzeichnis ist:

directory = wb.Sheets("Directory").Cells(1, 2).Value 

und Dateiname ist eine Variable.

Ich habe festgestellt: Wenn eine Datei mit Workbooks.Open (directory & fileName) Befehl geöffnet wird, zeigt eine CSV-Datei vor dem Anwenden von "Text to Columns" den Inhalt in Spalten aufgeteilt (anstatt den gesamten Inhalt in einer Spalte). Gibt es eine Möglichkeit, in Workbooks.Open (directory & fileName) zu definieren, dass jede Datei als .csv geöffnet werden muss?

Danke

+0

Wenn die CSV-Dateien werden als „* .csv“ gespeichert dann auch die eingestellten könnten seperator, indem Sie die erste Zeile 'SEP =,' verwenden, um "," als seperator oder 'SEP =;' zur Verwendung von ";" ... –

Antwort

1

Bitte versuchen Sie, den Parameter als Link zu folgen. Der Schlüsselpunkt ist das Trennzeichen ist, oder;

workbooks.Open(Filename, [UpdateLinks], [ReadOnly], [Format], [Password], [WriteResPassword], [IgnoreReadOnlyRecommended], [Origin], **[Delimiter]**, [Editable], [Notify], [Converter], [AddToMru], [Local], [CorruptLoad]) 

von www.safaribooksonline.com

-1

Ausgabe ist mit Ihrer Windows-Einstellung, wird es automatisch die Wörter auf der Liste Trennzeichen basiert splitten. Sie können die Listen-separtor-Einstellung in Windows ändern und versuchen, die csv als normale Excel zu öffnen.

you can change the List separator setting in the Regional and Language Options as specified on the 

    1. Click the Windows Start menu. 
    2. Click Control Panel. 
    3. Open the Regional and Language Options dialog box. 
    4. Click the Regional Options Tab. 
    5. Click Customize/Additional settings (Win10). 
    6. Type a new separator in the List separator box. 
    7. Click OK twice. 
+0

Ich habe den Eindruck, dass die Einstellung des Trennzeichens durch MS Excel eingestellt werden kann. Excel merkt sich die Option des Benutzers. Beim nächsten Mal wird MS Excel die Option direkt anwenden. –

+0

Wenn die Fenster die Option delimiter haben, werden die Daten automatisch abgegrenzt. Ich dachte, da könnte ein Problem sein. – newjenn

0

Sie können diese versuchen, die Daten zu lesen, aus den Textdateien „wie sie ist“, einschließlich csv, und schreiben Sie es in eine Excel-Arbeitsmappe:

Function MM_OpenTextFile(vPath As String, delim As String) As Variant 

    Dim FF As Integer 
    Dim lineArray As Variant 
    Dim temp As String 
    Dim arrayList As Object 

    Set arrayList = CreateObject("System.Collections.ArrayList") 

    FF = FreeFile 

    Open vPath For Input As #FF 
    While Not EOF(FF) 
     Line Input #FF, temp 
     lineArray = Split(temp, delim) 
     arrayList.Add lineArray 
     Erase lineArray 
    Wend 
    Close #FF 

    MM_OpenTextFile = WorksheetFunction.Transpose(WorksheetFunction.Transpose(arrayList.ToArray())) 

    arrayList.Clear 

    Set arrayList = Nothing 

End Function 

Dadurch wird der Inhalt der zuweisen getrennte Datei als 2D-Array zu einer Variante, die dann auf einem Arbeitsblatt platziert werden können, in ihm Zustand begrenzt wie so:

Sub Example() 

    Dim ar As Variant '// Must be a Variant to work 

    '// Change to a file and delimiter of your choosing... 
    ar = MM_OpenTextFile("C:\Users\BloggsJ\SomeFile.txt", ";")   

    '// Change 'A1' to the cell you want the data pasting to 
    With Range("A1").Resize(UBound(ar, 1), UBound(ar, 2)) 
     .NumberFormat = "@" '// Change format to "text" 
     .value = ar '// insert array values 
    End With 

End Sub 
+0

Danke für eine Antwort. Ich habe Zweifel, ob dieser Code auf viele Dateien anwendbar ist (in meinem Verzeichnis habe ich etwa 500 .csv-Dateien mit 10 Zeilen und 10 Spalten mit Inhalt). – Ale

+0

@KennethChan Das würde absolut keinen Unterschied machen mit dem Code in meiner Antwort. –

+0

@Ale Ich würde nicht empfehlen, 500 Dateien gleichzeitig zu öffnen - aber Sie können diesen Code in einer Schleife verwenden, um jeden in der Reihenfolge zu öffnen. –

Verwandte Themen