Закрыть скопированный рабочий лист при экспорте в CSV

Я пытаюсь сохранить каждый рабочий лист электронной таблицы Excel в файлы CSV. Следующий скрипт выполняет эту работу. Строка .Parent.Close savechanges:=False должна закрыть созданный рабочий лист, но при раскомментировании скрипт останавливается после первого листа. Если я прокомментирую строку, все листы будут обработаны.

Dim newWks As Worksheet
Dim wks As Worksheet

For Each wks In ActiveWorkbook.Worksheets
wks.Copy 'to a new workbook
Set newWks = ActiveSheet
With newWks
.SaveAs Filename:="C:\home\tmp\base\" & wks.Name & ".txt", FileFormat:=xlTextWindows
.Parent.Close savechanges:=False
End With
Next wks

MsgBox "done with: " & ActiveWorkbook.Name

person Sydney    schedule 23.09.2011    source источник


Ответы (1)


Вы закрываете активную книгу. Если вы хотите закрыть только что созданный объект, сделайте что-то вроде этого (проверено, у меня работает):

Dim newWkb As Workbook
Dim wks As Worksheet

For Each wks In ActiveWorkbook.Worksheets
  wks.Copy 'to a new workbook
  Set newWkb = ActiveWorkbook
  With newWkb
    .SaveAs Filename:="C:\home\tmp\base\" & wks.Name & ".txt", FileFormat:=xlTextWindows
    newWkb.Close savechanges:=False
  End With
Next wks

MsgBox "done with: " & ActiveWorkbook.Name
person Jon49    schedule 23.09.2011
comment
Я думаю, что ваш код и код Сиднея делают одно и то же, хотя ваш код более прямо указывает на закрытую книгу. Другими словами, Set newWkb = ActiveWorkbook аналогичен Set newWks = ActiveSheet.Parent, что фактически и делает код Сиднея. И ваш код, и код Сиднея отлично работают для меня в Excel 2010. - person Doug Glancy; 24.09.2011
comment
Да, я полагаю, единственная разница в том, что «Сохранить как» выполняется на листе в оригинале, а у меня «Сохранить как» в новой книге. Итак, я не знаю, почему это не сработало для него, но теперь это работает! Странный. - person Jon49; 24.09.2011
comment
Да, я не понимал, пока не прочитал этот пост, что вы можете сделать Worksheet.SaveAs. Я постоянно узнаю что-то новое на SO. - person Doug Glancy; 24.09.2011