这不是重复的,因为我想要一个解决方案,不能将文件重新格式化为txt:
我打算用分号作为分隔符打开一个csv文件。为此,我使用了以下代码:
Sub prueba2()
Dim sfile As String
Dim wb As Workbook
Dim Path As String
Dim Namefile As String
Path = "V:\evfilesce9i9\apps9\vbe9\dep4\KFTP\KFTP001D_FicherosCeca"
Namefile = "\QryCECARFSECTORIAL0239*.txt"
Set wb = Workbooks.Open(Filename:=Path & Namefile, Delimiter:=";")
End Sub
当我尝试它时,使用逗号作为分隔符打开它而不是我指定的分号(分号)
我在其他问题中已经读到这在2006年后的Excel版本中是正常的,并且最快的解决方案是将文件重新格式化为txt。
这不符合我的需要,因为我必须在不改变格式的情况下这样做。我找不到任何解决方案。
有人可以帮助我吗?
答案 0 :(得分:1)
请参阅MS文档here。
我认为你想使用Format参数,而不是delimiter参数。
尝试:
Set wb = Workbooks.Open(Filename:=Path & Namefile, Format:=4)
似乎只有在Format设置为6时才使用Delimiter参数,这表示自定义分隔符。分号是标准分隔符。
修改强>
嗯......所以,这似乎是Excel / VBA中一段时间的棘手问题。
经过一些研究后,“格式”选项只能在打开.txt文件时使用。这就是“重新格式化文件到.txt”的原因之一。
然而,有些事情可以做。
如果文件的第一行是:Excel将处理打开分号分隔文件:
sep=;
我知道你说你无法重新格式化文件,但这是你可以做的事情吗?
如果没有,我建议的下一步是:1)使用Open Statement打开你的文件,然后将其写入临时文件(可能是.txt),重新打开原始的Workbooks.Open(格式:= 4),或2)编写自己的文本导入器。可以在this stackoverflow页面中找到示例文本导入程序。
Sub ImportCSVFile(filepath As String)
Dim line As String
Dim arrayOfElements
Dim linenumber As Integer
Dim elementnumber As Integer
Dim element As Variant
linenumber = 0
elementnumber = 0
Open filepath For Input As #1 ' Open file for input
Do While Not EOF(1) ' Loop until end of file
linenumber = linenumber + 1
Line Input #1, line
arrayOfElements = Split(line, ";")
elementnumber = 0
For Each element In arrayOfElements
elementnumber = elementnumber + 1
Cells(linenumber, elementnumber).Value = element
Next
Loop
Close #1 ' Close file.
End Sub