【问题标题】:Save a csv with data in columns using VBA [duplicate]使用 VBA 在列中保存包含数据的 csv [重复]
【发布时间】:2016-02-25 19:45:24
【问题描述】:

我在 Excel-VBA 中制作了一个宏:

  • 创建一个新工作表
  • 将数据写入 5 列
  • 将文件另存为 CSV
  • 关闭文件

问题是,一旦文件关闭,数据就不再按列分隔。但它是以逗号分隔并连接成一列。

奇怪的是,手动关闭最近创建的 csv 文件(而不是在 VBA 中关闭)解决了这个问题,因为再次打开时数据仍然在列中。

我在这里要做的是在 VBA 中保存/关闭文件,并将数据保存在列中。

这是一个例子:

Sub test()
    Workbooks.Add
    Cells(1, 1) = "a"
    Cells(1, 2) = "a"
    Cells(1, 3) = "a"
    ActiveWorkbook.SaveAs filename:= "C:\Users\user\Desktop\File.csv", FileFormat:=xlCSV
End Sub

然后手动关闭“File.csv”并再次打开它:

第二个例子:

Sub test()
    Workbooks.Add
    Cells(1, 1) = "a"
    Cells(1, 2) = "a"
    Cells(1, 3) = "a"
    ActiveWorkbook.SaveAs filename:= "C:\Users\user\Desktop\File.csv", FileFormat:=xlCSV
    ActiveWorkbook.Close
End Sub

文件在此处自动关闭。这是手动打开时的结果:

【问题讨论】:

  • 在第二个示例中将 ActiveWorkbook.Close SaveChanges:=True 添加到 End Sub 之前。我对此进行了测试,效果很好。
  • 没想到,我想你可以设置分隔符。不要使用逗号,而是使用 TAB。检查:superuser.com/questions/476327/…
  • @Santosh 没有帮助,输出与示例 2 相同。
  • @Eric 我电脑的分隔符设置为“;”不是“,”,我仍然得到一个逗号。

标签: vba excel csv


【解决方案1】:

这对我有用:

Sub test()

    Workbooks.Add
    Cells(1, 1) = "a"
    Cells(1, 2) = "a"
    Cells(1, 3) = "a"

    With ActiveWorkbook
        .SaveAs Filename:="C:\Users\user\Desktop\File.csv", FileFormat:=xlCSV, Local:=True
        .Close False
    End With

End Sub

【讨论】:

  • 是的,这会起作用。说明:由于 VBA 默认在 EN_US 语言环境中执行所有操作,因此默认情况下它使用逗号作为 CSV 分隔符。 SaveAs 中有一个参数Local 可以避免这种情况,并使用区域设置中设置的分隔符。但是您必须在SaveAs 之后关闭工作簿而不保存。如果不是,.Close SaveChanges:=True 将再次使用逗号。
猜你喜欢
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-16
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 2018-09-27
相关资源
最近更新 更多