13

我将数据复制到电子表格中,使用 VBA 对其进行格式化,然后将该工作表保存到 CSV 文件中。

我使用以下代码:

ws.SaveAs Filename:=filestr, Fileformat:=xlCSV

ws 是我保存的工作表。

这给了我一个逗号分隔的 CSV 文件。

我想将该工作表保存到以分号分隔的文件中。

我发现了以下内容:

  1. 转到开始>设置>区域和语言选项
  2. 点击自定义按钮
  3. 在列表分隔符旁边键入分号 (;)

我按照上面的步骤将代码更改为:

ws.SaveAs Filename:=filestr, Fileformat:=xlCSV, Local:=True

我仍然得到一个逗号分隔的 CSV 文件作为输出。

我正在使用 Excel 2003,我的操作系统是 Windows XP。

4

6 回答 6

26

我刚刚检查过这个,因为有同样的问题。在这种情况下,文件名没有任何功能。

这对我有用:

With ActiveWorkbook
    .SaveAs Filename:="My File.csv", FileFormat:=xlCSV, Local:=True
    .Close False
End With

在区域设置中 -> ; <- 作为列表分隔符。关闭时不要保存更改也很重要 -> 使用 Close 您必须使用False.

于 2013-08-28T15:44:14.220 回答
2

无需声明所有这些变量,只需在 SaveAs 方法的末尾添加 local:=true 即可,如下所示:

ActiveWorkbook.SaveAs Filename:="C:/Path/TryMe.csv", FileFormat:=xlCSV, Local:=True
于 2017-06-21T17:26:29.580 回答
2

我遇到了同样的问题,在考虑尝试使用 VBA 代码和内核调用更改区域设置中的“行分隔符”后,我认为这会更痛苦,所以我只是找到了一些使用 Scripting.FileSystemObject 的示例来满足我的需求。

以下代码将采用现有的 csv 文件并将所有逗号替换为波浪号“~”字符。

Private Sub commaReplace()

    Dim objFSO
    Dim filePath
    Dim migratorFileName
    Dim strFullPath1
    Dim strFullPath2
    Const ForReading = 1
    'define a TextStream object
    Dim objTS
    Dim strContents As String

    'note, my code actually uses the below commented out filepath
    'as the location of the workbook can be arbitrary, e.g.
    'Worksheets("FilePath").[A2:A2].Value is determined when workbook
    'is opened
    'filePath = Worksheets("FilePath").[A2:A2].Value
    filePath = "C:\Temp\"

    'our original file that we've exported as csv file in another section of code
    migratorFileName = "MigratorInput.csv"
    strFullPath1 = filePath + migratorFileName

    'the path and file name we want to save to, tilde separated vs. comma
    migratorFileName = "MigratorInput.tilde.csv"
    strFullPath2 = filePath + migratorFileName

    'read everything from the csv file, replacing comma with tilde
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objTS = objFSO.OpenTextFile(strFullPath1, ForReading)
    strContents = objTS.ReadAll
    strContents = Replace(strContents, ",", "~")
    objTS.Close

    'write everything out to another file, note, this could just overwrite
    'the original file if you pass the optional overwrite flag
    Set objTS = objFSO.CreateTextFile(strFullPath2)
    objTS.Write strContents
    objTS.Close

End Sub

然后,您可以从创建 csv 文件的子例程中调用 commaReplace 子例程。

希望它可以帮助某人!

于 2019-04-19T17:19:56.373 回答
1

在构建成功后使用 vbs 脚本:

.SaveAs 文件名, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1

其中参数是:

Object Filename,
Object FileFormat,
Object Password,
Object WriteResPassword,
Object ReadOnlyRecommended,
Object CreateBackup,
XlSaveAsAccessMode AccessMode,
Object ConflictResolution,
Object AddToMru,
Object TextCodepage,
Object TextVisualLayout,
Object Local

源链接:https ://msdn.microsoft.com/ru-ru/library/microsoft.office.tools.excel.workbook.saveas.aspx

“SaveAs”函数中的最后一个“1”等于 Local=True

此外,分号必须定义为操作系统区域设置中的列表分隔符(请参阅上面的答案)

于 2015-03-25T21:03:26.950 回答
-1

使用 xlCSVMSDOS 插入 xlCSV

ActiveWorkbook.SaveAs Filename:="my File.csv", FileFormat:= xlCSVMSDOS, Local:=True

它对我有用

于 2018-08-01T09:28:53.700 回答
-2

只需使用此代码:ActiveWorkbook.SaveAs "My File.csv", xlCSV, Local:=True

(不要使用:文件名:=)

于 2013-07-02T09:23:29.473 回答