[英]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.