【发布时间】:2021-01-27 15:31:43
【问题描述】:
我每月收到一个包含多张工作表的 Excel 文件。每张工作表都需要先拆分为 .CSV 文件,然后才能上传到我们的系统中进行阅读,而且鉴于单个工作簿可能包含 10 到 15 页以上,手工完成是一件苦差事。
目前,我正在使用这个 VBA 脚本来完成这项工作:
Sub Splitbook()
'Updateby20140612
Dim xPath As String
xPath = Application.ActiveWorkbook.Path
Application.ScreenUpdating = False
Application.DisplayAlerts = False
For Each xWs In ThisWorkbook.Sheets
xWs.Copy
Application.ActiveWorkbook.SaveAs Filename:=xPath & "\" & xWs.Name & ".csv"
Application.ActiveWorkbook.Close False
Next
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
它“有效”。问题?当您尝试打开生成的 csv 窗口时,会抱怨扩展名不匹配并警告损坏。如果您单击对话框,它仍然会打开,但目标系统不能这样做。因此,我只剩下找出丢失的内容或返回手动解析。有什么帮助吗?
【问题讨论】:
-
你好,达米亚诺。欢迎来到堆栈溢出。您确定此代码“有效”吗?生成的文件应该可以在文本编辑器中打开和读取(如果它对于记事本来说太大,请尝试使用 notepad++ 或类似工具)。在我看来,您正在保存一堆 Excel 文件,但为它们提供了“.csv”的文件扩展名。您没有指定“文件格式”,只是它的名称。
-
这很可能是我的问题。我对 vba 不是特别精通,并且不久前从一个专注于拆分工作簿的线程中获得了该脚本的大部分内容。我需要添加什么来修复它?
-
检查我链接到的另一个 SO 问题,如果您觉得它有帮助,请点赞。它在代码中有一个“另存为”行,您可能会发现它很有用。
-
我不确定我是否遗漏了一个细节......代码看起来应该可以工作,但是当我运行它时,所发生的只是工作簿更新,每张工作表都需要工作簿的名称,而无需制作 CSV 文件。我会注意到这个其他代码需要我指定一个目标目录,我更喜欢我只是将文件放在工作簿已经在的同一目录中。
标签: excel vba csv xlsx excel-2016