Сохранение листов книги под разными файлами

Автор Наталья Эглит, 12.12.2012, 22:35

« назад - далее »

Наталья Эглит

Добрый вечер! В моем файле несколько листов под разными названиями. Можно ли сохранить каждый лист отдельно друг от друга и чтобы название каждого листа автоматически присваивалось названию нового сохраняющегося файла???? 

Alex_ST

Sub ExtractSheets()
    Dim Sh As Worksheet
    Dim sPath$: sPath = ThisWorkbook.Path & "\"
    For Each Sh In ThisWorkbook.Worksheets
        If Sh.Visible = xlSheetVisible Then Sh.SaveAs Filename:=sPath & Sh.Name & ".xls"
    Next Sh
End Sub
С уважением, Алексей

Наталья Эглит


Alex_ST

#3
Вот так покорректнее, наверное, будет: исходная книга не закрывается, а все сохранённые листы закрываются. Да и расширение задаётся таким же, как у исходной книги (для разных версий Excel'я)
Sub ExtractSheets2()
   Dim Sh As Worksheet, Wb As Workbook
   Set Wb = ThisWorkbook
   For Each Sh In ThisWorkbook.Worksheets
      If Sh.Visible = xlSheetVisible Then
         Sh.Copy: ActiveWorkbook.SaveAs (Sh.Name & "." & Split(ThisWorkbook.Name, ".")(1))
         ActiveWorkbook.Close: Wb.Activate
      End If
   Next Sh
End Sub
С уважением, Алексей

Наталья Эглит

Ещё раз спасибо. Только у меня появилось дополнение. Мне теперь нужно, чтобы каждая страница  сохранялась не в экселевском файле, а в pdf-файле. У нас настроен комп так,что при нажати Сtrl+P (печать) выбираем определенное название принтера и тогда страницы не печатаются, а сохраняются в pdf-файле. Я пыталась в Вашем макросе вместо слов "save as" написать алгоритм для печати с названием нужного принтера, но ничего не получилось. Может там какая-то хитрость есть?

Alex_ST

#5
Вы макрорекордером пытались записать печать на Adobe-printer?
Я думаю, главной проблемой будет задать имя сохранения файла. Наверное, надо при отправке на печать задавать опцию команде. А вот как? Никогда не пробовал, не знаю.
И ещё попробуйте в Справке найти PrintOut Method, там, кажется, есть что-то про печать в файл и про имя файла.
С уважением, Алексей

Наталья Эглит

Да, я сначала записала нужные мне действия макрорекодером. Посмотрела алгоритм, и ту строку, которая относится к действиям печати, я скопировала вместо "Save as", но ничего не заработало.

Alex_ST

Ну, так вряд ли должно было получиться. Ведь нужно сначала ещё и активный принтер установить - Adobe PDF (но только один раз для всего цикла по листам), и для каждого листа задать имя сохранения.
Вы про метод PrintOut почитали?
Я сам сейчас, к сожалению не могу поковыряться - занят домашними делами.
С уважением, Алексей

Наталья Эглит

да, я обязательно почитаю, может потом у меня появятся новые мысли :) ещё раз спасибо за помощь.

Poltava

Не пытайтесь спорить с дебилом. Иначе вы опуститесь до его уровня. Где он задавит вас своим опытом.

Alex_ST

Никогда не печатал в файл макросом...
Попробовал сделать на вскидку так:
Sub PrintSheetsAsPDF()
   Dim sPrinter$: sPrinter = Application.ActivePrinter
   If Not sPrinter Like "*PDF*" Then Exit Sub
   Dim Sh As Worksheet, Wb As Workbook
   Set Wb = ThisWorkbook
   For Each Sh In Wb.Worksheets
      If Sh.Visible = xlSheetVisible Then Sh.PrintOut ActivePrinter:=sPrinter, PrintToFile:=True, PrToFileName:=Sh.Name & ".pdf"
   Next Sh
End Sub

Файлы-то создаются (пока в Моих документах - директории по умолчанию, но это можно и изменить), но искалеченные - как PDF не открываются.
Наверное, что-то не так делаю.
С уважением, Алексей