【发布时间】:2015-05-12 03:06:34
【问题描述】:
我正在尝试将启用宏的 Excel 工作簿另存为 csv 文件,覆盖旧的(下面我必须更改文件夹和工作表的名称,但这似乎不是问题) .
Sub SaveWorksheetsAsCsv()
Dim SaveToDirectory As String
Dim CurrentWorkbook As String
Dim CurrentFormat As Long
CurrentWorkbook = ThisWorkbook.FullName
CurrentFormat = ThisWorkbook.FileFormat
SaveToDirectory = "\MyFolder\"
Application.DisplayAlerts = False
Application.AlertBeforeOverwriting = False
Sheets("My_Sheet").Copy
ActiveWorkbook.SaveAs Filename:=SaveToDirectory & "My_Sheet" & ".csv", FileFormat:=xlCSV
ActiveWorkbook.Close SaveChanges:=False
ThisWorkbook.Activate
ThisWorkbook.SaveAs Filename:=CurrentWorkbook, FileFormat:=CurrentFormat
Application.DisplayAlerts = True
Application.AlertBeforeOverwriting = True
End Sub
有时会失败
运行时错误 1004:对象 _workbook 的方法保存失败**)
调试器指出:
ActiveWorkbook.SaveAs Filename:=SaveToDirectory & "My_Sheet" & ".csv", FileFormat:=xlCSV
我用谷歌搜索了一些我尝试过的解决方案:
- 指定目录为字符串
- 避免在文件名或文件夹中使用任何特殊字符(参见here)
- 将工作表复制为值,然后将其保存为 .csv(参见 here)
- 使用 .csv 代码号指定 FileFormat(参见 here)
- 禁用/重新启用某些警报
- 在 ActiveWorkbook.SaveAs 行中添加其他字段,涉及密码、创建备份等
不过,它可能连续正确运行多达 50-60 次,然后在某个时候再次失败。
任何建议,除了停止使用 VBA/Excel 来完成这项任务,这很快就会发生,但我现在不能。
编辑:感谢 Degustaf 的建议解决。我对 Degustaf 的建议代码只做了两处修改:
-
ThisWorkbook.Sheets而不是CurrentWorkbook.Sheets -
FileFormat:=6而不是FileFormat:=xlCSV(显然更健壮 到不同版本的 Excel)
Sub SaveWorksheetsAsCsv()
Dim SaveToDirectory As String
Dim CurrentWorkbook As String
Dim CurrentFormat As Long
Dim TempWB As Workbook
Set TempWB = Workbooks.Add
CurrentWorkbook = ThisWorkbook.FullName
CurrentFormat = ThisWorkbook.FileFormat
SaveToDirectory = "\\MyFolder\"
Application.DisplayAlerts = False
Application.AlertBeforeOverwriting = False
ThisWorkbook.Sheets("My_Sheet").Copy Before:=TempWB.Sheets(1)
ThisWorkbook.Sheets("My_Sheet").SaveAs Filename:=SaveToDirectory & "My_Sheet" & ".csv", FileFormat:=6
TempWB.Close SaveChanges:=False
ThisWorkbook.SaveAs Filename:=CurrentWorkbook, FileFormat:=CurrentFormat
ActiveWorkbook.Close SaveChanges:=False
Application.DisplayAlerts = True
Application.AlertBeforeOverwriting = True
End Sub
【问题讨论】:
-
各位,感谢你们的回复。我现在没有时间尝试这样做,明天再做,然后回复你。
-
由于我的代表级别,我无法投票支持你们两个,无论如何感谢您的帮助。 Degustaf 解决方案看起来成功了!我测试了它超过 100 次,它没有失败。我在上面的问题上添加了来自 Degustaf 回复的已编辑和重新调整的代码。由于某种原因,JMMach 仍然导致问题。
标签: excel vba csv runtime-error save-as