使用VBA导入分号分隔的CSV文件,不重命名为txt

使用VBA导入分号分隔的CSV文件,不重命名为txt,vba,methods,delimiter,Vba,Methods,Delimiter,这不是重复,因为我希望解决方案不会将文件重新格式化为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 = "\QryC

这不是重复,因为我希望解决方案不会将文件重新格式化为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

这不符合我的需要,因为我必须在不改变格式的情况下完成。我没有找到任何解决办法


有人能帮我吗?

请查看MS文档

我想您应该使用Format参数,而不是delimiter参数

尝试:

似乎只有当Format设置为6(表示自定义分隔符字符)时才使用Delimiter参数。分号是标准的分隔符

编辑:

嗯。。。因此,在Excel/VBA中,这似乎是一个棘手的问题

经过进一步研究,Format选项只能在打开.txt文件时使用。这就是为什么将文件重新格式化为.txt是一种可能的解决方案

然而,有些事情是可以做到的

如果文件的第一行是:

sep=;
我知道你说你不能重新格式化这些文件,但你能做到吗

如果不是,我建议的下一件事是:1使用打开文件,然后将其写入一个临时文件(可能是.txt),以便使用原始工作簿重新打开。OpenFormat:=4,或2编写自己的文本导入程序。可以在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

试过了,但没用。我还尝试了格式:=5,它是用一个粗略的格式打开的,而不是用逗号分隔的,当我使用上面显示的代码时发生了这种情况,所以,这是一个进步,但我仍然不知道如何直接以分号分隔符格式打开它。我用一种更巧妙的方法解决了这个问题,其中包括使用.TextToColumns方法以分号分隔列,因为我得到了您的第一个提示,以粗略的格式打开它,而不是以逗号分隔的方式,这就是我没有将格式设置为5时发生的情况。。然后我将.Close方法与.SaveChanges:=FALSE一起使用,以不永久修改要读取其数据的文件。然而,你的答案是有用的。
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