Я пытаюсь сохранить книгу 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 для этой задачи, что скоро произойдет, но пока я не могу.
РЕДАКТИРОВАТЬ: решено благодаря предложению Дегустафа. Я внес только два изменения в код, предложенный Дегустафом:
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