我的 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 文件进行尝试,您将收到更详细的错误消息:但错误消息与 .csv 文件不同:
我通过在即时 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/