Ошибка «метод saveas объекта _workbook failed» при попытке сохранить XLSM как CSV
Я пытаюсь сохранить (с поддержкой макросов) книгу 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
Я погуглил это, и, видимо, это часто случается с людьми, и некоторые из решений, которые я попробовал, были:
Указывая, что каталог является строкойИзбегайте каких-либо специальных символов в имени файла или папки (видноВот)Скопируйте и вставьте лист в качестве значения, прежде чем сохранить его в формате .csv (видноВот)Указание FileFormat с кодом .csv (видноВот)Отключение / повторное включение некоторых оповещенийДобавление других полей в строку ActiveWorkbook.SaveAs, касающихся паролей, создание резервных копий и т. Д.Тем не менее, он может корректно работать до 50-60 раз подряд, а затем в какой-то момент снова потерпеть неудачу в ряду.
Любое предложение или вещи, которые я мог бы найти, чтобы решить эту проблему (кроме прекращения использования VBA / Excel для этой задачи, что произойдет в ближайшее время, но я пока не могу).
Спасибо заранее за ваше время.
РЕДАКТИРОВАТЬ: Решено благодаря предложению Degustaf. Я сделал только два изменения в предложенном коде Дегустафа:
ThisWorkbook.Sheets вместо CurrentWorkbook.SheetsFileFormat: = 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