我试图将启用宏的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的方法saveas失败**)
调试器指出:
ActiveWorkbook.SaveAs Filename:=SaveToDirectory & "My_Sheet" & ".csv", FileFormat:=xlCSV
我用谷歌搜索,尝试了一些解决方案:
尽管如此,它可能连续连续正确运行多达50-60次,然后在某些时候再次失败。
除了停止使用VBA / Excel之外,其他任何建议都将很快发生,但我暂时不能。
编辑:解决了由于德古斯塔夫的建议。我仅对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
我通常发现这ActiveWorkbook
是这些情况下的问题。我的意思是说您以某种方式没有选择该工作簿(或任何其他工作簿),而Excel不知道该怎么办。不幸的是,由于copy
不返回任何内容(复制的工作表会很不错),因此这是解决此问题的标准方法。
因此,我们可以采用这种方式,就像我们如何将该工作表复制到新工作簿中,并获得对该工作簿的引用。我们可以做的是创建新工作簿,然后复制工作表:
Dim wkbk as Workbook
Set Wkbk = Workbooks.Add
CurrentWorkbook.Sheets("My_Sheet").Copy Before:=Wkbk.Sheets(1)
Wkbk.SaveAs Filename:=SaveToDirectory & "My_Sheet" & ".csv", FileFormat:=xlCSV
Wkbk.Close SaveChanges:=False
或者,在这种情况下有更好的方法:WorkSheet
支持该SaveAs
方法。无需复制。
CurrentWorkbook.Sheets("My_Sheet").SaveAs Filename:=SaveToDirectory & "My_Sheet" & ".csv", FileFormat:=xlCSV
如果仍保持打开状态,我将警告您此后将工作簿重新保存为其原始名称,但是您的代码中已经包含该名称。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句