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

在VBA中将Excel工作簿转换为CSV,excel,vba,csv,Excel,Vba,Csv,将Excel工作簿转换为CSV时,VBA脚本中出现错误。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")

将Excel工作簿转换为CSV时,VBA脚本中出现错误。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正在生成,但我收到一个错误:

运行时错误“1004”:无法访问“folder.csv”

错误出现在第8行(
wb\u xl.SaveAs…

如果这现在没有造成任何问题,那么以后会出现。拆分声明和赋值,通常避免自动实例化对象,但对于创建时生成外部进程的对象更是如此

Dim objExcel As Excel.Application
Set objExcel = New Excel.Application
…不要忘记
。完成后退出该实例:

'...
objExcel.Quit
现在,错误1004

这似乎是直截了当的,CSV正在生成中

非限定的
xlCSV
常量没有什么大不了的,但是请记住,它只有在引用
Excel
库时才有效;考虑资格:

wb_xl.SaveAs FileName:="O:\documents\folder.csv", FileFormat:=Excel.xlCSV
如果正在生成CSV,则
SaveAs
调用有效,失败的语句如下:

您无法
打开
该文件,该文件已打开-这就是该语句引发错误1004的原因:如果您在Excel UI中尝试使用.xlsm文件,您将收到更详细的错误消息:

但错误消息与.csv文件不同:

我在即时窗格中键入以下内容并打开一个新的空白工作簿时收到了此错误消息:

ThisWorkbook.SaveAs "C:\Dev\test123.csv", xlCSV
Set b = Workbooks.Open("C:\Dev\VBA\test123.csv")
我想这正是你所犯的错误

删除
wb
,您不需要它(注意:如果
打开
成功,分配将抛出类型不匹配错误,因为您无法将
工作簿
对象分配给
工作表
引用;
将wb设置为Excel。工作表
看起来错误)。删除
工作簿。也打开
操作,CSV已打开

换言之:

Private子命令按钮1\u单击()
Dim xlApp作为Excel.Application
Set xlApp=New Excel.Application
将wb作为Excel.工作表进行调整
设置wb=xlApp.Workbooks.Open(“O:\documents\folder.xlsx”)
wb.SaveAs文件名:=“O:\documents\folder.csv”,文件格式:=Excel.xlCSV
wb.Close savechanges:=False
xlApp.退出
端接头
如果这现在没有造成任何问题,那么以后会出现。拆分声明和赋值,通常避免自动实例化对象,但对于创建时生成外部进程的对象更是如此

Dim objExcel As Excel.Application
Set objExcel = New Excel.Application
…不要忘记
。完成后退出该实例:

'...
objExcel.Quit
现在,错误1004

这似乎是直截了当的,CSV正在生成中

非限定的
xlCSV
常量没有什么大不了的,但是请记住,它只有在引用
Excel
库时才有效;考虑资格:

wb_xl.SaveAs FileName:="O:\documents\folder.csv", FileFormat:=Excel.xlCSV
如果正在生成CSV,则
SaveAs
调用有效,失败的语句如下:

您无法
打开
该文件,该文件已打开-这就是该语句引发错误1004的原因:如果您在Excel UI中尝试使用.xlsm文件,您将收到更详细的错误消息:

但错误消息与.csv文件不同:

我在即时窗格中键入以下内容并打开一个新的空白工作簿时收到了此错误消息:

ThisWorkbook.SaveAs "C:\Dev\test123.csv", xlCSV
Set b = Workbooks.Open("C:\Dev\VBA\test123.csv")
我想这正是你所犯的错误

删除
wb
,您不需要它(注意:如果
打开
成功,分配将抛出类型不匹配错误,因为您无法将
工作簿
对象分配给
工作表
引用;
将wb设置为Excel。工作表
看起来错误)。删除
工作簿。也打开
操作,CSV已打开

换言之:

Private子命令按钮1\u单击()
Dim xlApp作为Excel.Application
Set xlApp=New Excel.Application
将wb作为Excel.工作表进行调整
设置wb=xlApp.Workbooks.Open(“O:\documents\folder.xlsx”)
wb.SaveAs文件名:=“O:\documents\folder.csv”,文件格式:=Excel.xlCSV
wb.Close savechanges:=False
xlApp.退出
端接头

不是你真正想问的问题,而是。。。。“wb”不是工作表吗?打开.csv文件时,您正在将工作表设置为工作簿对象。我从未尝试过将工作表设置为工作簿对象,但这似乎是使用的错误对象…如果您执行
SaveAs
操作,现在不是活动工作簿吗?如果已经打开了就无法打开。但我认为@FrankBall是正确的。。。。可能应该将
wb
重命名为
ws
,以避免混淆,并将打开的工作簿更改为实际工作簿object@FrankBall正确,但这是一个类型不匹配错误,在打开工作簿后会立即抛出。除了其他人已经注意到的以外,我看不出这段代码有任何根本性的错误(
Dim…与新的一样,但出于不同的原因)。您的实际代码是否使用这些精确的字符串文字?如果您在即时窗格(Ctrl+G)中键入
?Dir(“O:\Documents\Folder.csv”)
,是否会出现错误,或者它只是打印
Folder.csv
?这不是您想要的,但…不是“wb”工作表?当您打开.csv文件时,您正在将工作表设置为工作簿对象。我从未尝试将工作表设置为工作簿对象,但这似乎是使用的错误对象…如果您执行
SaveAs
,这不是现在的活动工作簿吗?如果它已打开,则无法打开。但我认为@FrankBall是正确的。。。。可能应该将
wb
重命名为
ws
,以避免混淆,并将打开的工作簿更改为实际工作簿object@FrankBall正确,但这是一个类型不匹配错误,在打开工作簿后会立即抛出。除了其他人已经注意到的以外,我看不出这段代码有任何根本性的错误(
Dim…与新的一样