简体   繁体   English

vba复制带有分号分隔符的csv文件

[英]vba copy csv file with semicolon delimiters

I'm using a macro to copy a csv file into a new worksheet, this part works well. 我正在使用宏将csv文件复制到新的工作表中,这一部分效果很好。 However, my csv file uses semicolons as delimiters, and when I use the following code, the text don't split into columns: 但是,我的csv文件使用分号作为分隔符,并且当我使用以下代码时,文本不会分成几列:

Sub Bam()
    Dim FilesToOpen
    Dim wkbAll As Workbook
    Dim wkbTemp As Workbook
    Dim newSheet As Worksheet
    FilesToOpen = Application.GetOpenFilename _
    (FileFilter:="Text Files (*.csv), *.csv", Title:="Text Files to Open")  
    Set wkbTemp = Workbooks.Open(Filename:=FilesToOpen)
    wkbTemp.Sheets(1).Cells.Copy
    Set newSheet = ThisWorkbook.Sheets.Add
    With newSheet
        .Name = wkbTemp.Name
        .PasteSpecial
    End With
    Application.CutCopyMode = False
    wkbTemp.Close
End Sub

I tried to use the following commands to set the semicolon as a delimiter: 我试图使用以下命令将分号设置为定界符:

With newSheet
    .Name = wkbTemp.Name
    .PasteSpecial
    .TextToColumns DataType:=xlDelimited, ConsecutiveDelimiter:=True, Semicolon:=True
End With

or 要么

Set wkbTemp = Workbooks.Open(Filename:=FilesToOpen, Delimiter:=4)

But, in the first case, the following error message appears while I try to use my macro: 但是,在第一种情况下,当我尝试使用宏时会出现以下错误消息:

highlighting .TextToColumns 突出显示.TextToColumns

Compile error:
Method or data member not found.

In the second case, nothing happens, all the text still appears in one column. 在第二种情况下,什么也没有发生,所有文本仍显示在一栏中。

Does anyone had an idea to set the semicolon as a delimiter? 有没有人想过将分号设置为定界符?

Thank you 谢谢

I would first bring the data into column A and then parse the data out: 我首先将数据带入A列,然后解析出数据:

Sub Bam()
    Dim FilesToOpen, v As Variant
    Dim wkbAll As Workbook
    Dim wkbTemp As Workbook
    Dim newSheet As Worksheet, N As Long, J As Long
    FilesToOpen = Application.GetOpenFilename _
    (FileFilter:="Text Files (*.csv), *.csv", Title:="Text Files to Open")
    Close #1
    Open FilesToOpen For Input As #1
    J = 1
    Do While Not EOF(1)
            Line Input #1, TextLine
            Cells(J, 1) = TextLine
            J = J + 1
    Loop
    Close #1

    N = Cells(Rows.Count, "A").End(xlUp).Row
    For J = 1 To N
        v = Cells(J, 1).Value
        If InStr(v, ";") > 0 Then
            ary = Split(v, ";")
            For i = LBound(ary) To UBound(ary)
                Cells(J, i + 1).Value = ary(i)
            Next i
        End If
    Next J
End Sub

I like your way, I'll study it. 我喜欢你的方式,我会研究的。 In the meantime, I found a way to do it! 同时,我找到了一种方法! I modified the extension of my *.csv file to *.txt, and slightly changed the code like: 我将* .csv文件的扩展名修改为* .txt,并稍微更改了代码,例如:

Sub Bam()
    Dim FilesToOpen
    Dim wkbAll As Workbook
    Dim wkbTemp As Workbook
    Dim newSheet As Worksheet
    FilesToOpen = Application.GetOpenFilename(Title:="Text Files to Open")
        Set wkbTemp = Workbooks.Open(Filename:=FilesToOpen, Format:=4)
        wkbTemp.Sheets(1).Cells.Copy
        Set newSheet = ThisWorkbook.Sheets.Add
        With newSheet
            .Name = wkbTemp.Name
            .PasteSpecial
        End With
        Application.CutCopyMode = False
        wkbTemp.Close   
End Sub

It's not exactly what I wanted, as I now have to modify my script which generate the *.csv file, but it works! 这并不是我想要的,因为我现在必须修改生成* .csv文件的脚本,但是它可以工作!

Thanks for your idea, I'll seriously study it, and maybe I'll not have to modify my script. 感谢您的想法,我将认真研究它,也许我不必修改脚本。 In all the cases, Thanks a lot, I'm always curious about news ways to work and always want to improve my code! 在所有情况下,非常感谢,我一直对新闻的工作方式充满好奇,并一直希望改进我的代码! :) Thank you. :) 谢谢。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM