2016-03-29 15 views
1

Dizindeki tüm .csv dosyalarını listeliyorum, teker teker açın ve “Metinden Sütuna” uygula, sonra her dosyayı .xlsx olarak kaydediyorum. dosyaları açmak için kullandığım:VBA'da WorkBooks.Open() komutu .csv dosyalarına nasıl uygulanır?

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

ve dosya adı bir değişkendir:

Workbooks.Open (directory & fileName) 

dizin olduğu durumlarda.

Fark ettim: Bir dosya Workbooks.Open (directory & fileName) komutu ile açıldığında, “Metinleri Kolona uygula” yı uygulamadan önce bile .csv dosyası, içeriğin sütunlara bölünmesini (tüm içeriği bir sütuna koymak yerine) gösterir. Workbooks.Open (directory & fileName)'da herhangi bir dosyanın .csv olarak açılması gerektiğini tanımlamanın bir yolu var mı?

Teşekkürler

+0

CSV dosyaları "* .csv" o zaman da ayarlayabilirsiniz olarak kaydedilmişse ilk satırın sahibi olan seperatör "SEP =", "kullanmak için", " ayrıştırıcı olarak veya 'SEP =;' kullanmak için ';' ... –

cevap

-1

sayısından

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

otomatik liste ayırıcı dayalı kelimeleri ayırdığını, Windows ayarıyla olduğunu. Pencerelerde liste separtor ayarını değiştirebilir ve csv'yi normal excel olarak açmaya çalışabilirsiniz.

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

Ayırıcı ayarının MS Excel tarafından ayarlanabileceği izlenimim var. Excel, kullanıcının seçeneğini ezberleyecektir. Bir dahaki sefere, MS Excel, bunun yerine doğrudan seçeneği uygulayacaktır. Pencerelerin sınırlayıcı seçeneği varsa –

+0

, verileri otomatik olarak sınırlar. Bunun yüzünden bir sorun olabileceğini düşündüm. – newjenn

0

Sen csv içeren metin dosyalarından "olduğu gibi" veri okumak için bu deneyin ve bir Excel çalışma kitabına yazabilir:

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 

Bu içeriğini atar sonra onun içinde bir çalışma yerleştirilebilir bir çeşidine 2B dizi olarak ayrılmış dosya şöyle durumunu ayrılmış oluyor:

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

Bir cevap için teşekkürler. Şüphem varsa, bu kod birçok dosyaya uygulanabilirse (dizinimde 10 satır ve 10 sütun içeriğiyle yaklaşık 500 .csv dosyası var)? – Ale

+0

@KennethChan Bu, cevabımdaki kodu kullanarak kesinlikle bir fark yaratmazdı. –

+0

@Ale Aynı anda 500 dosya açmayı denemenizi tavsiye etmiyorum - ancak her birini sırayla açmak için bu kodu bir döngüde kullanabilirsiniz. –