如何将Workbooks.Open()命令应用于VBA中的.csv文件?

我将所有的.csv文件列在一个目录中,逐一打开它们并应用“Text To Columns”,然后将每个文件保存为.xlsx。 为了打开我使用的文件:

Workbooks.Open (directory & fileName) 

目录是:

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

而filename是一个variables。

我注意到:当通过Workbooks.Open (directory & fileName)命令打开一个文件时,甚至在应用“文本到列”之前,一个.csv文件显示它的内容被拆分成列(而不是将所有内容放在一列中)。 有没有办法在Workbooks.Open (directory & fileName)定义任何文件必须打开为.csv?

谢谢

请尝试按照参数作为链接。 关键是分隔符是,还是;

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

从www.safaribooksonline.com

您可以尝试从文本文件(包括csv)中“按原样”读取数据,并将其写入Excel工作簿:

 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 

这会将分隔文件的内容作为二维数组分配给一个变体,然后可以将其放置在工作表上,分隔状态如下所示:

 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 

问题是与您的Windows设置,它会自动分割基于列表分隔符的单词。 您可以在Windows中更改列表的separtor设置,并尝试像正常的excel一样打开csv。

 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.