使用分号分隔符另存为CSV

时间:2013-10-09 07:24:20

标签: excel excel-vba csv locale vba

我目前正在使用此功能进行保存,但我遇到了问题:

Private Sub spara()
    ActiveWorkbook.SaveAs Filename:="T:\filepath+ ActiveWorkbook.Name", _
    FileFormat:=xlCSV, CreateBackup:=False
End Sub

它会自动保存,,但我需要将其与;一起保存在其文件中。有可能改变它以某种方式节省的方式吗?

我已经尝试使用谷歌搜索此问题,但所有关于.csv文件保存的宏只是如何保存.csv以及如何将多个表格拆分为.csv。

7 个答案:

答案 0 :(得分:12)

您的Excel使用哪种语言?如果您的母语使用“;”默认情况下,您可以传递参数“local:= True”

ActiveWorkbook.SaveAs Filename:="C:\Temp\Fredi.csv", FileFormat:=xlCSV, CreateBackup:=False, local:=True

如果没有,你唯一的选择是事后搜索和替换......

答案 1 :(得分:2)

更改Excel选项(高级,编辑选项)将十进制分隔符设置为,(显然(!))

答案 2 :(得分:1)

很有可能这个问题不能仅使用Excel VBA解决。问题是,虽然Excel Save As...使用机器区域设置定义列表分隔符值,但Excel VBA始终使用en-US区域设置,因此,它始终使用,作为列表分隔符。

我建议保存CSV,然后使用自定义控制台应用/脚本进行后期处理。有很多CSV解析器可以读取,-csv,然后将其保存为;-csv

答案 3 :(得分:1)

我在关闭工作簿

时解决了添加“SaveChanges:= False”的问题
With ActiveWorkbook
     .SaveAs Filename:="T:\filepath+ ActiveWorkbook.Name", FileFormat:=xlCSV, Local:=True
     .Close SaveChanges:=False
End With

答案 4 :(得分:0)

我一直在寻找这个以帮助解决我遇到的类似问题, 我有一个excel表,我导出到一个csv文件,然后在其他地方卸载但需要使用分号而不是逗号分隔字符,这在我手动导出文件时工作正常,因为我已经更改了以下内容 控制面板>地区和语言>>附加设置>>列表分隔符 从逗号到分号。 但当我试图通过VBA自动化时,它默认为逗号, 为了解决这个问题,我添加了Christian Sauer建议的本地参数,然后我就改变了我的区域设置。

ActiveWorkbook.SaveAs Filename:="Filename.txt", FileFormat:=xlCSV, CreateBackup:=False, Local:=True

感谢Christian的指针。

答案 5 :(得分:0)

对于遇到此代码问题的人

dim wa as Workbook

Workbooks.OpenText FileName:=path2file, _
DataType:=xlDelimited, Semicolon:=True, Local:=True
set wa = ActiveWorkbook

    wa.SaveAs FileName:=path2file, FileFormat:=xlCSV, _ ConflictResolution:=xlLocalSessionChanges, Local:=True

    wa.Close False

第二行非常重要,如果wa.Close False不存在,则会要求批准保存,或者如果wa.Close True它将替换&#34 ;;" for","。

进入当地环境并制作";"列表分隔符,VBA仍然与","分开。修改了上面的代码并完成了。

希望这能为某些人提供一些启示

答案 6 :(得分:0)

这里的答案很好,但它们对我不起作用,因为我正在尝试创建一个工具,该工具适用于他们自己计算机上的任何用户,而且我不想设置这些语言环境在每个人的电脑上。我什至尝试使用 FileSystemObject 滚动我自己的 CSV 导出器,但目标路径名在 SharePoint 上,因此也失败了。

然后我偶然发现了一个非常简单的解决方法:创建一个新的工作表,将您的所有信息连接到一个列中,用分号分隔,例如:

CONCAT('Old WS'!A1,";",'Old WS'!B1,";",'Old WS'!C1,";",'Old WS'!D1,";",'Old WS'!E1)

然后添加一些这样的代码来导出它:

Call Worksheets("Export WS").Copy
ActiveWorkbook.SaveAs Filename:=CSVname, FileFormat:=xlCSV, CreateBackup:=False
ActiveWorkbook.Close

因为全部在一列中,Excel 不会添加自己的分隔符!