微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

VBA 将 .XLSX 文件转换为批量 .CSV 的问题

如何解决VBA 将 .XLSX 文件转换为批量 .CSV 的问题

我每月收到一个包含多张工作表的 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 窗口时,会抱怨扩展名不匹配并警告损坏。如果您点击对话框,它无论如何都会打开,但目标系统不能这样做。因此,我只能找出缺少的内容或返回手动解析。有什么帮助吗?

解决方法

我创建了一个版本,它将您的代码与其他答案的相关部分结合在一起。打开的工作簿将依次采用每个工作表的名称。因此,在运行此代码之前保存您的工作簿非常重要。最后打开的版本将包含所有选项卡,但它们不在已保存的同名 CSV 文件中。

如果您想在最后再次保存为原始名称和格式,我认为其他一些答案也可以提供帮助。

我删除了 Worksheet Copy 命令并注释掉了 Sub get_data_from_file() Dim FileToOpen as Variant Dim OpenBook As Workbook Dim wsdest as Worksheet Dim lDestLastRow as Long Application.ScreenUpdating=False Set wsdest = Workbooks("Test.xslm").Worksheets("Input Sheet") lDestLastRow=Sheet1.Cells(1,1).CurrentRegion.Row+1 FileToOpen=Application.GetOpenFileName(Title:="Browse for your file and input range",FileFilter:"Excel Files (*xls*),*xls*") If FileToOpen<>False Then SetOpenBook=Application.Workbooks.Open(FileToOpen) OpenBook.Sheets(1)Range(B:E).Copy wsdest.Range("A",lDestLastRow).PasteSpecial xlPasteValues OpenBook.Sheets(1)Range(G:H).Copy wsdest.Range("E",lDestLastRow).PasteSpecial xlPasteValues OpenBook.Sheets(1)Range(M:M).Copy wsdest.Range("G",lDestLastRow).PasteSpecial xlPasteValues End if Application.ScreenUpdating=True End Sub 行,因为我不确定他们在做什么。

Application.ActiveWorkbook.Close False

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。