如何使用VBA保存分号分隔的csv文件?

时间:2012-11-21 15:38:43

标签: excel vba

我将数据复制到电子表格中,使用VBA格式化,然后将该表格保存为CSV文件。

我使用以下代码:

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

ws是我保存的工作表。

这为我提供了逗号分隔的CSV文件。

我想将该表保存为以分号分隔的文件。

我发现了以下内容:

  1. 转到开始>设置>区域和语言选项
  2. 点击“自定义”按钮
  3. 列表分隔符旁边的分号(;)
  4. 我按照上面的步骤将代码更改为:

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

    我仍然以逗号分隔的CSV文件作为输出。

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

6 个答案:

答案 0 :(得分:16)

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

这对我有用:

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

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

答案 1 :(得分:2)

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

ActiveWorkbook.SaveAs Filename:="C:/Path/TryMe.csv", FileFormat:=xlCSV, Local:=True

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

.SaveAs Filename,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

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

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

此外,分号必须在OS区域设置中定义为列表分隔符(参见上面的答案)

答案 4 :(得分:0)

使用xlCSV的xlSCVMSDOS读入

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

对我有用

答案 5 :(得分:0)

我遇到了同样的问题,并考虑尝试使用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子例程。

希望它对某人有帮助!