2016-04-13 6 views
0

Я пытаюсь экспортировать именованный диапазон на нескольких листах в один PDF-файл. Первоначально казалось, что он работает нормально, тогда я заметил, что выбранный диапазон изменится при загрузке различных листов в массив.Excel VBA Export Несколько листов в PDF

Это мое понимание, используя Selection.ExportAsFixedFormat, это будет экспортировать только выбранные ячейки. Поэтому у меня есть макрос, чтобы прокрутить нужные листы, выберите различные диапазоны, затем создайте массив для всех листов, чтобы разрешить экспорт в один PDF-файл.

Dim wb As Workbook 
Dim srcSht As Worksheet 
Dim toPrnt As String 

Set wb = ThisWorkbook 
Set srcSht = wb.Sheets("print_array") 

Dim myArr1() As Variant 
    myArr1 = srcSht.Range("myPrintArray") 

Dim i As Long 
Dim j As String 
    For i = LBound(myArr1, 1) To UBound(myArr1, 1) 
      j = myArr1(i, 1) 

    wb.Sheets(j).Activate 
     wb.ActiveSheet.Range("CCB_" & Left(j, 5) & "_Print").Select 

    Next i 

wb.Sheets(Array("CAT01 - Request for Resource", _ 
          "CAT02 - Resource Allocation", _ 
          "CAT03 - Product Data Sources", _ 
          "CAT04 - Target & Control Cells", _ 
          "CAT05 - Matching And Deduping", _ 
          "CAT06 - Exclusions", _ 
          "CAT07 - Data from other teams", _ 
          "CAT08 - Outputs", _ 
          "CAT09 - Special Instructions", _ 
          "CAT10 - Brief Meeting Sign Off" _ 
          )).Select 

Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:=PDF_FileAndPath, _ 
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _ 
    :=False, OpenAfterPublish:=True 

При пошаговом через код, все идет по плану, вплоть до создания листов массива, в этот момент изменить выбранные диапазоны.

Я также попытался использовать PageSetup, но результат тот же.

With ActiveSheet.PageSetup 
    .Orientation = xlLandscape 
    .PaperSize = xlPaperA4 
    .Zoom = False 
    .FitToPagesWide = 1 
    .FitToPagesTall = 1 
    .PrintArea = Range("CCB_" & Left(j, 5) & "_Print").Address 
End With 

Просмотрев несколько похожих сообщений на этом форуме, я все еще в растерянности.

Может ли кто-нибудь пролить свет на то, почему выбранный диапазон изменяется при создании массива или, есть ли какие-либо другие предложения, которые могут вам помочь?

Большое спасибо

ответ

0

мне удалось решить мою проблему путем копирования выбранных диапазонов во временный файл, то экспортирующей оттуда. Полное решение выглядит так ...

Dim wb As Workbook 
Dim srcSht As Worksheet 
Dim tempFile As String 

Set wb = ThisWorkbook 
Set srcSht = wb.Sheets("print_array") 

Dim myArr1() As Variant 
    myArr1 = srcSht.Range("myPrintArray") 

Dim i As Long 
Dim j As String 
    For i = LBound(myArr1, 1) To UBound(myArr1, 1) 
      j = myArr1(i, 1) 

    wb.Sheets(j).Activate 

    With ActiveSheet.PageSetup 
     .Orientation = xlLandscape 
     .PaperSize = xlPaperA4 
     .Zoom = False 
     .FitToPagesWide = 1 
     .FitToPagesTall = 1 
     .PrintArea = Range("CCB_" & Left(j, 5) & "_Print").Address 
    End With 

     Next i 

    wb.Sheets(Array("CAT01 - Request for Resource", _ 
           "CAT02 - Resource Allocation", _ 
           "CAT03 - Product Data Sources", _ 
           "CAT04 - Target & Control Cells", _ 
           "CAT05 - Matching And Deduping", _ 
           "CAT06 - Exclusions", _ 
           "CAT07 - Data from other teams", _ 
           "CAT08 - Outputs", _ 
           "CAT09 - Special Instructions", _ 
           "CAT10 - Brief Meeting Sign Off" _ 
           )).copy 

       With ActiveWorkbook 
        .Save 

        tempFile = .FullName 

        .ExportAsFixedFormat Type:=xlTypePDF, Filename:=PDF_FileAndPath, _ 
         Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _ 
         :=False, OpenAfterPublish:=True 

        .Close 

       End With 

       Kill tempFile 

    End If 

Я надеюсь, что это поможет кому-то в будущем.

Спасибо.

0

У меня была такая же проблема. Я столкнулся с другим, более простым решением. Нет необходимости в файлах temp.

После .select вашего массива, вместо Выбора .ExportAsFixedFormat, используйте ActiveSheet .ExportAsFixedFormat. Поскольку ваши листы активируются с вашим первоначальным .select, ActiveSheet затем выбирает все нужные листы для экспорта.

Ваш код должен выглядеть следующим образом:

Dim wb As Workbook 
Dim srcSht As Worksheet 
Dim toPrnt As String 

Set wb = ThisWorkbook 
Set srcSht = wb.Sheets("print_array") 

Dim myArr1() As Variant 
    myArr1 = srcSht.Range("myPrintArray") 

Dim i As Long 
Dim j As String 
    For i = LBound(myArr1, 1) To UBound(myArr1, 1) 
      j = myArr1(i, 1) 

    wb.Sheets(j).Activate 
     wb.ActiveSheet.Range("CCB_" & Left(j, 5) & "_Print").Select 

    Next i 

wb.Sheets(Array("CAT01 - Request for Resource", _ 
          "CAT02 - Resource Allocation", _ 
          "CAT03 - Product Data Sources", _ 
          "CAT04 - Target & Control Cells", _ 
          "CAT05 - Matching And Deduping", _ 
          "CAT06 - Exclusions", _ 
          "CAT07 - Data from other teams", _ 
          "CAT08 - Outputs", _ 
          "CAT09 - Special Instructions", _ 
          "CAT10 - Brief Meeting Sign Off" _ 
          )).Select 

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=PDF_FileAndPath, _ 
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _ 
    :=False, OpenAfterPublish:=True 
Смежные вопросы