如何在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
代码
在使用VBA 6.5.1025的Excel 2003 11.8231.8221 SP3中,我可以使用以下VBA代码打开以分号分隔的文件:
Workbooks.OpenText filename:=myFilename, _
DataType:=xlDelimited, Semicolon:=True, Local:=True
但是,当使用VBA 6.5.1025在Excel 2000 9.0.8961 SP1中运行相同的代码时,出现以下错误:
编译错误:未找到命名参数
那是 - 我认为 - 因为Excel 2000不知道命名参数“Local”。
因此,我删除了“Local:= True”部分。但问题是,CSV文件中的整行都写入一个单元格,而不是分成单独的分号分隔部分。
我在互联网上搜索了一个解决方案,但没有找到任何有用和简洁的内容。
有什么想法吗?
[2009年2月17日更新]
我尝试使用宏录制器从 user lc 中提出建议。然而,结果令人困惑。
当我使用菜单File-> Open ...打开CSV文件,然后选择CSV文件时,正确分析分号分隔数据。录制的代码非常简单:
Workbooks.Open filename:= _
"D:\testdata\Example 01 CSV\input.csv"
但是当我在宏中使用该VBA代码时,每一行最终都会在一个单元格中结束。
根据 user barrowc 的建议,我还将Windows“区域和语言选项”设置从“德语(瑞士)”更改为“英语(美国)”。即使重新启动Excel后,也没有任何变化,同样的问题。
我想知道为什么它正在处理 user Remou 的系统。您有哪些区域和语言设置?
答案 0 :(得分:3)
[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
从Shasur获得灵感:http://vbadud.blogspot.com/2007/06/vba-read-text-files-with-leading.html
我仍然不知道为什么Workbooks.OpenText
无法在我的系统上运行,即使它似乎适用于 user Remou 的系统。我想这可能与操作系统语言(英语)以及区域和语言设置(德语,瑞士)有关,但我不确定。
无论如何,这个解决方法对我有用。谢谢大家的建议和帮助!
答案 1 :(得分:2)
不确定,但您可以尝试录制宏来执行相同的操作并检查它生成的VBA代码。你可能会在那里得到关于缺少什么的提示。
答案 2 :(得分:2)
我发现这在Excel 2000中适用于我:
Workbooks.OpenText filename:=myFilename, _
DataType:=xlDelimited, Semicolon:=True
答案 3 :(得分:2)
以下是Excel 2000中的OpenText
方法:
OpenText方法
将文本文件加载并解析为新文件 单张表的工作簿 包含已解析的文本文件数据。
<强>语法强>
表达式 .OpenText(文件名,来源, StartRow,DataType,TextQualifier, ConsecutiveDelimiter,Tab,Semicolon, 逗号,空间,其他,OtherChar, FieldInfo,DecimalSeparator, ThousandsSeparator )
这是Excel 2003版本:
OpenText方法[Excel 2003 VBA语言参考]
将文本文件加载并解析为新文件 单张表的工作簿 包含已解析的文本文件数据。
表达式 .OpenText( FileName,Origin,StartRow,DataType, TextQualifier,ConsecutiveDelimiter, 标签,分号,逗号,空间,其他, OtherChar,FieldInfo, TextVisualLayout,DecimalSeparator, ThousandsSeparator, TrailingMinusNumbers,Local )
所以Local
确实是Excel 2003的新参数,在Excel 2000中不起作用
不知道错误行为的原因。 Local
参数定义为:
本地 可选变体。如果是区域设置,请指定 True 的机器应该用于 分隔符,数字和数据 格式化。
您可能需要仔细检查Excel 2000 PC上的区域设置,并检查是否有任何可能导致数据被错误解释的内容。另外,尝试在Excel 2000方法上明确指定DecimalSeparator
和ThousandsSeparator
参数,看看是否有帮助
答案 4 :(得分:2)
还有一个解决方法 - 只需将.csv文件重命名为.txt并使用OpenText方法。
答案 5 :(得分:2)
我更喜欢:
Workbooks.Open fileName:=myFilename, UpdateLinks:=False, Local:=True
答案 6 :(得分:0)
通常将逗号勾选为true作为分隔符,通常是小数分隔符。添加DecimalSeparator:=&#34;,&#34;而鲍勃是你的叔叔
答案 7 :(得分:0)
Re任何想法?
如果您想使用excel修复其他人的文件,请在文件的第一行添加此文件,而不使用引号后跟换行:“sep =;”
手动打开愚蠢文件的一种简单方法是将扩展名重命名为.txt或.htm,然后从Excel中重命名使用文件 - 打开。
从VBA我建议在MSDN中查找方法并手动指定每个参数,我的经验是这消除了大多数区域问题。