Ler*_*rve 5 csv excel-vba excel-2000
如何在Excel 2000中使用VBA打开以分号分隔的CSV文件?
样本数据
An ID;TEST20090222
A Name;Firstname Surname
A Date;11.05.2000
Country:;SomeCountryName
Currency;EUR
CostA;
CostB;
CostC;
Part1;10;20;30
Part2;;;;
Part3;34;56;87
Run Code Online (Sandbox Code Playgroud)
码
在带有VBA 6.5.1025的Excel 2003 11.8231.8221 SP3中,我可以使用以下VBA代码打开以分号分隔的文件:
Workbooks.OpenText filename:=myFilename, _
DataType:=xlDelimited, Semicolon:=True, Local:=True
Run Code Online (Sandbox Code Playgroud)
但是,当在带有VBA 6.5.1025的Excel 2000 9.0.8961 SP1中运行相同的代码时,我收到以下错误:
编译错误:找不到命名参数
那是 - 我认为 - 因为Excel 2000不知道命名参数"Local".
因此,我删除了"Local:= True"部分.但问题是,CSV文件中的整行被写入一个单元格而不是分成单独的分号分隔部分.
我在互联网上搜索了一个解决方案,但没有发现任何有用和简洁的内容.
有任何想法吗?
[更新17.02.2009]
我尝试了用户lc和宏录制器的建议.然而,结果令人困惑.
当我使用菜单File-> Open ...打开CSV文件,然后选择CSV文件时,正确分析分号分隔数据.录制的代码非常简单:
Workbooks.Open filename:= _
"D:\testdata\Example 01 CSV\input.csv"
Run Code Online (Sandbox Code Playgroud)
但是,当我在宏中使用该VBA代码时,每一行最终会再次出现在一个单元格中.
根据用户barrowc的建议,我还将Windows"区域和语言选项"设置从"德语(瑞士)"更改为"英语(美国)".即使重启Excel后,没有任何改变,同样的问题.
我想知道为什么它正在使用用户Remou的系统.您有哪些区域和语言设置?
[2009 年 2 月 22 日更新]
与此同时,我通过自己编写导入函数而不是使用 Workbooks.OpenText 解决了该问题。
我只是将 CSV 文件作为文本文件打开,逐行读取,将每一行拆分为以分号分隔的元素,并将每个元素写入一个单元格中。
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
Run Code Online (Sandbox Code Playgroud)
从 Shasur 获得灵感:http://vbadud.blogspot.com/2007/06/vba-read-text-files-with-leading.html
我仍然不知道为什么它Workbooks.OpenText
在我的系统上不起作用,尽管它似乎在用户 Remou的系统上工作。我想这可能与操作系统语言(英语)以及区域和语言设置(德语、瑞士)有关,但我不确定。
无论如何,解决方法对我有用。谢谢大家的建议和帮助!