excel - 在 VBA 中将 Excel 工作簿转换为 CSV

标签 excel vba csv

我的 VBA 脚本用于将 Excel 工作簿转换为 CSV 时出现错误。 VBA 脚本通过 Microsoft Word VBA 脚本运行。

Private Sub CommandButton1_Click()

Dim objExcel As New Excel.Application
Dim wb_xl As Excel.Workbook
Dim wb As Excel.Worksheet

Set wb_xl = objExcel.Workbooks.Open("O:\documents\folder.xlsx")
wb_xl.SaveAs FileName:="O:\documents\folder.csv", FileFormat:=xlCSV
Set wb = objExcel.Workbooks.Open("O:\documents\folder.csv")
wb_xl.Close savechanges:=False

End Sub

这似乎很简单,并且正在生成 CSV,但我收到一个错误:

Run-time error '1004': Cannot access 'folder.csv'



错误在第 8 行 ( wb_xl.SaveAs... )。

最佳答案

Dim objExcel As New Excel.Application

如果现在这没有造成任何问题,那将是以后。拆分声明和赋值,通常避免自动实例化对象,但更特别是对于在创建时产生外部进程的对象。
Dim objExcel As Excel.Application
Set objExcel = New Excel.Application
...别忘了.Quit完成后的那个实例:
'...
objExcel.Quit
现在,错误 1004。
wb_xl.SaveAs FileName:="O:\documents\folder.csv", FileFormat:=xlCSV

This seems straight-forward and the CSV is being produced


不合格xlCSV常量没什么大不了,但请记住,它只是有效的,因为 Excel图书馆被引用;考虑对其进行限定:
wb_xl.SaveAs FileName:="O:\documents\folder.csv", FileFormat:=Excel.xlCSV
如果正在生成 CSV,则 SaveAs调用有效,失败的声明将是这个:
Set wb = objExcel.Workbooks.Open("O:\documents\folder.csv")

你不能Open该文件已经打开 - 这就是该语句抛出错误 1004 的原因:如果您在 Excel UI 中使用 .xlsm 文件进行尝试,您将收到更详细的错误消息:
Sorry, Excel can't open two workbooks with the same name at the same time
但错误消息与 .csv 文件不同:
Run-time error 1004: Sorry, we couldn't find C:\Dev\test123.csv. Is it possible it was moved, renamed or deleted?
我通过在即时 Pane 中键入此错误消息,并打开了一个新的空白工作簿:
ThisWorkbook.SaveAs "C:\Dev\test123.csv", xlCSV
Set b = Workbooks.Open("C:\Dev\VBA\test123.csv")
我认为这正是你得到的错误。
删除 wb ,您不需要它(注意:如果 Open 成功,则赋值将引发类型不匹配错误,因为您不能将 Workbook 对象分配给 Worksheet 引用;Dim wb As Excel.Worksheet 看起来是错误的)。删除 Workbooks.Open操作也一样,CSV 已经打开。
换句话说:
Private Sub CommandButton1_Click()

    Dim xlApp As Excel.Application
    Set xlApp = New Excel.Application

    Dim wb As Excel.Worksheet
    Set wb = xlApp.Workbooks.Open("O:\documents\folder.xlsx")

    wb.SaveAs FileName:="O:\documents\folder.csv", FileFormat:=Excel.xlCSV
    wb.Close savechanges:=False

    xlApp.Quit

End Sub

关于excel - 在 VBA 中将 Excel 工作簿转换为 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60233967/

相关文章:

excel - 使用 VBA 宏复制多张纸

excel - 无法通过变量激活工作簿

vba - 如何使录制的宏在任何工作表上工作?

vba - 如何将多列转换为单列?

powershell - 使用Powershell根据关键字删除标题行

java - 如何立即返回 String Builder 对象作为 rdd ?或者将 String Builder 对象转换为 rdd?

python - 从 CSV 输出制作 DataFrame

excel - 在 Visual Studio Code 中的现有 Excel 文件上调试 Excel javascript 加载项

database - 如何在 Excel 中使用带有查询的 Access 数据库作为数据透视表

python - 如何使用 pandas 写入 Excel 文档的中间