2015-11-27 3 views
0

Я пытаюсь сохранить несколько выбранных рабочих листов в одном PDF-файле.Сохранение нескольких выбранных листов в виде одного PDF

relativePath = wb.Path & "\" & sheetName & dateToday 

wb.Sheets(Array("Sheet1", "Sheet2", "Sheet3")).Select 

***This is the code in question***.ExportAsFixedFormat Type:=xlTypePDF, _ 
Filename:=relativePath, _ 
Quality:=xlQualityStandard, IncludeDocProperties:=True, _ 
IgnorePrintAreas:=False, OpenAfterPublish:=True 

Я попробовал два метода в модификации «Это код в вопросе»

  1. Я использовал «Выбор»
    • Результат: Пустой документ сохраняется в формате PDF с ничего в ней
  2. Я использовал 'ActveSheet'
    • Результат: документ сохраняется в формате PDF только первый лист
  3. Я использовал «термометру» (это мое текущее учебное пособие, просто чтобы проверить, работает ли он)
    • Результат: как ожидается, документ сохраняется в формате PDF со всеми листами внутри, это было главным образом проверить, чтобы увидеть, если функциональность PDF работал

чтобы уточнить, мой желаемый результат sheet1, sheet2 и Sheet3 быть сохранены в тот же самый PDF (у меня есть куча других листов в моей книге, и я заменю статически кодированные имена листов массивом, когда я его получу)

У меня есть решение 1 и 2 из ответов stackoverflow, но оба они делают не работают для меня, где они работают для других людей.

Может ли кто-нибудь пролить свет на решение или хотя бы определить, почему эти две вещи происходят?

+0

Если вы хотите, вы можете сделать его как UserForm с помощью элемента управления ListBox для отображения листов, а затем оттуда выбрать листы, которые вы хотите экспортировать в виде одного файла PDF. Взгляните на это: http://stackoverflow.com/questions/33914691/check-boxes-in-user-form-to-select-sheets-to-print/33919614?noredirect1_comment55628856_33919614 – Alex4336

+0

Извините, может быть, я должен был сказать в моем вопросе. Я повторяю несколько книг и рабочих листов и хочу сохранить как PDF для выбранных рабочих листов в каждой книге, и я бы хотел автоматизировать его, поэтому взаимодействие не требуется. – drcoding

ответ

1

@drcoding

Я работал над кодом, представленной выше вами. Кажется вместо линии

wb.Sheets(Array("Sheet1", "Sheet2", "Sheet3")).Select 

Вы можете использовать;

Worksheets("Sheet1").Select (False) 
Worksheets("Sheet2").Select (False) 
Worksheets("Sheet3").Select (False) 

Лист1,2,3 может быть заменен именем, которое позднее вы решите передать на лист. Также обратите внимание, что используйте (false), чтобы лист 1 не был отменен после того, как выбран лист 2.

Я сделал аналогичный код, который я размещаю ниже, вы тоже можете его использовать. Он перебирает несколько имен листов в листе «Индекс файлов» и может преобразовать все листы, выбранные «Y» в столбце I на этом листе. Он также использует аналогичное имя файла, которое вы выбрали в relativePath = wb.Path & "\" & sheetName & dateToday.Попробуйте это, если хотите;

Ссылка: http://profit21.blogspot.in/2015/05/template-for-entity-financial-reporting.html

Ссылка на файл: https://www.dropbox.com/s/hi4wfxqz9ixiuby/Profit21.blogspot.in%20Limited%20-%20FY%202014-15%20-%20Accounts%20%26%20Reports%20%282015%201_54%29.xltm?dl=0

код, как показано ниже:

Sub TEFAR_Convert_to_PDF() 

Dim Count As Integer 
Dim SheetsToPDF As Integer 

    Application.ScreenUpdating = False 
    Sheets("File Index").Select 
    Cells(7, 9).Select 

For Count = 7 To 207 

    'If Worksheets("File Index").Cells(Count, 9) = "" Then GoTo outofi: 
     If Worksheets("File Index").Cells(Count, 9) = "Y" Then '1 
      sheetnam = Worksheets("File Index").Cells(Count, 7) 
      If IsError(sheetnam) = True Then sheetnam = "" 
      If sheetnam <> "" Then        '2 
       Worksheets(sheetnam).Select (False) 
      End If            '2 
     End If             '1 

Next Count 

outofi: 



PDF_filename = (Application.ActiveWorkbook.Path & "\" & Worksheets("Entity Master Data").Cells(3, 3) & " - " & Worksheets("Entity Master Data").Cells(13, 3) & " - " & "PDF Copy of Annual Report.pdf") 
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=PDF_filename, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False 

MsgBox ("File has been saved as PDF in " & PDF_filename & " .") 

Sheets("File Index").Select 
Application.ScreenUpdating = True 


End Sub 

Ура! EE

+0

Фантастический, это похоже на ответ, который я искал. У меня нет времени, чтобы проверить его сейчас, но обновляется, когда я это сделаю, спасибо за легко удобоваримый ответ. 1+ – drcoding

+0

Привет Нетерпеливый, я использовал (False) часть при выборе листов дим scSheet как рабочий лист Для каждого scSheet В wb.Worksheets Если LCase (левый (scSheet.Name, 3)) = "s & с" Тогда scSheet.Select (False) End If Next Но я получаю эту ошибку «Ошибка времени выполнения» 1004: Microsoft Excel ничего не нашел для печати. ​​' Я использую «Если LCase (Left (scSheet.Name, 3)) =« s & c »Затем« фрагмент кода в другом месте моего скрипта и он отлично работает, поэтому что-то останавливает выбор листов. – drcoding

Смежные вопросы