Excel 使用分号分隔符另存为CSV

Excel 使用分号分隔符另存为CSV,excel,csv,locale,vba,Excel,Csv,Locale,Vba,我目前正在使用此功能进行保存,但我有一个问题: Private Sub spara() ActiveWorkbook.SaveAs Filename:="T:\filepath+ ActiveWorkbook.Name", _ FileFormat:=xlCSV, CreateBackup:=False End Sub 它会用,自动保存,但我需要它用保存在其文件中。是否有可能以某种方式改变它的保存方式 我试过在谷歌上搜索这个问题,但是所有关于.csv文件保存的宏都只是如何保存在

我目前正在使用此功能进行保存,但我有一个问题:

Private Sub spara()
    ActiveWorkbook.SaveAs Filename:="T:\filepath+ ActiveWorkbook.Name", _
    FileFormat:=xlCSV, CreateBackup:=False
End Sub
它会用
自动保存,但我需要它用
保存在其文件中。是否有可能以某种方式改变它的保存方式


我试过在谷歌上搜索这个问题,但是所有关于.csv文件保存的宏都只是如何保存在.csv中以及如何将多张工作表拆分为.csv。

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


如果没有,您唯一的选择是在以后搜索和替换…

很可能仅使用Excel VBA无法解决此问题。问题是,当Excel
另存为…
使用机器区域设置定义列表分隔符值时,Excel VBA总是使用en-US区域设置,因此,它总是使用
作为列表分隔符


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

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

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

ActiveWorkbook.SaveAs Filename:="Filename.txt", FileFormat:=xlCSV, CreateBackup:=False, Local:=True
感谢Christian提供的指针。

我在关闭工作簿时添加了“SaveChanges:=False”解决了这个问题

With ActiveWorkbook
     .SaveAs Filename:="T:\filepath+ ActiveWorkbook.Name", FileFormat:=xlCSV, Local:=True
     .Close SaveChanges:=False
End With

适用于对此代码有问题的人

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
它将替换“;”for“,”

在进入本地设置并使用“;”作为列表分隔符之后,VBA仍然使用“,”分隔。将代码修改为上面的代码,就这样完成了


希望这能为这里的一些

好答案带来一些启发,但它们对我不起作用,因为我正在尝试创建一个工具,它可以为任何用户在他们自己的计算机上工作,我不想在每个人的PC上都设置这种语言环境。我甚至尝试使用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不会添加自己的分隔符

恐怕不容易。csv定义为带有逗号。而csv解析在完全通用性上是困难的,因为您必须正确处理包含逗号的带引号字符串。如果我是你,我会做的是自己对csv进行后期处理。在最简单的情况下,可以用分号转换输出文件中的每个逗号。在更复杂的情况下(正如我提到的),可以使用正则表达式。或者在vba中构建自己的保护程序。就其名称而言,CVS是逗号分隔的值。您可以使用脚本打开.csv文件,然后将“,”替换为“;”“救命!”芭丝谢芭很不幸,这不是真的。Excel的本地化版本使用“;”作为分隔符。德文版的Excel可以做到这一点,我不知道还有哪些人可以做到这一点。此外,csv还可以代表“字符分隔值”——这使得csv格式非常糟糕。@Christian Sauer知道这一点很有帮助。你认为萨克纳尔·纳姆(saknar namn)会以某种方式欺骗他的优秀员工,让他们认为它的语言环境是德语吗?@芭丝谢芭:不,我认为不是。我寻找了一种简单的方法来实现这一点,因为函数的本地化很烦人,但我没有找到简单的切换。添加
local:=True
似乎在我的机器上不起作用(仍然使用
作为分隔符)。它实际上在瑞典很有效,因此我非常感谢您。当地人:=真的是去戈伊的路,我不知道。现在我知道了。
Call Worksheets("Export WS").Copy
ActiveWorkbook.SaveAs Filename:=CSVname, FileFormat:=xlCSV, CreateBackup:=False
ActiveWorkbook.Close