11

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

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

它会自动保存,,但我需要将其保存;在其文件中。是否有可能以某种方式改变它的保存方式?

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

4

8 回答 8

16

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

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

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

于 2013-10-09T07:40:39.080 回答
3

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

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

感谢克里斯蒂安的指点。

于 2015-03-16T13:44:20.223 回答
2

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

于 2013-10-09T10:16:39.787 回答
2

我解决了它在关闭工作簿时添加“SaveChanges:= False”

With ActiveWorkbook
     .SaveAs Filename:="T:\filepath+ ActiveWorkbook.Name", FileFormat:=xlCSV, Local:=True
     .Close SaveChanges:=False
End With
于 2015-08-14T18:41:00.363 回答
1

仅使用 Excel VBA 很可能无法解决此问题。问题是,虽然 ExcelSave As...使用机器语言环境定义列表分隔符值,但 Excel VBA 始终使用 en-US 语言环境,因此,它始终,用作列表分隔符。

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

于 2013-10-09T08:44:48.100 回答
1

对于对此代码有问题的人

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它会替换“;” 为了 ”,”。

进入本地设置并制作“;”后 列表分隔符,VBA 仍然用“,”分隔。修改上面的代码,就搞定了。

希望这能给一些人一些启发

于 2016-09-28T18:40:42.013 回答
0

扩展詹姆斯芬加斯的答案

解决方案:

将多列中的所有信息连接成一列,并通过您选择的分隔符(即分号)分隔连接字符串中的数据。然后将一列复制到新文件并保存。

局限性:

但是,请注意,当连接数据中某处出现逗号时,此解决方案存在缺陷,因为连接字符串被双引号包裹 - 请参见下面的说明。

(1) 保存文件时,VBA 假定逗号是文件的分隔符。VBA 还会看到您的字符串中存在逗号。因此,为了防止将来拆分字符串,VBA 将串联的字符串用双引号引起来。

(2) 您可以尝试通过将系统分隔符设置为分号并使用“Local:=True”参数保存文件来绕过此问题。但是,现在 VBA 知道分号是文件的分隔符。VBA 还可以看到您的字符串中存在分号。因此,为了防止将来拆分字符串(VBA 现在不希望使用分号进行拆分),VBA 将连接的字符串用双引号引起来。

于 2022-02-17T23:03:50.033 回答
0

这里的答案很好,但它们对我不起作用,因为我正在尝试创建一个适用于他们自己计算机上的任何用户的工具,而且我不想在每个人的 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 不会添加自己的分隔符!

于 2021-05-26T15:56:17.690 回答