2014-08-28 2 views
1

У меня есть код, который создает несколько листов (путем копирования существующего мастер-листа) на основе массива, а затем применяет автоматический фильтр.Программно обновлять автофильтр перед экспортом PDF

Вот код, который я использую для применения автофильтра, поскольку вы можете видеть, что он настроен для применения на активируемом листе и изменении любой ячейки.

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
Application.ScreenUpdating = False 
ActiveSheet.AutoFilterMode = False 
Range("A19").AutoFilter 
Range("A19").AutoFilter Field:=1, Criteria1:=Range("F17").Value 
End Sub 

Private Sub Worksheet_Activate() 
Application.ScreenUpdating = False 
ActiveSheet.AutoFilterMode = False 
Range("A19").AutoFilter 
Range("A19").AutoFilter Field:=1, Criteria1:=Range("F17").Value 
End Sub 

Моя проблема заключается в том, что я затем запустить некоторые дополнительный код для сохранения листов в формат PDF, в котором указать листы не были активированы в изменились (так поэтому фильтр не применяется)

Ниже мой сохранить рабочий лист код:

'Code to Save PDF 

    Dim wks As Worksheet 
    Dim WksCell As Range 

    ' Look at each cell within the range and obtain worksheet names 
    For Each WksCell In ActiveSheet.Range("A2:A" & iHighest).Cells 

    ' Attempt to reference the worksheet using this name 
    Set wks = Excel.Worksheets(WksCell.Value) 
    Set rng = wks.Range("A2:F20") 

         pdfName = wks.Name 
         ChDir ActiveWorkbook.Path & "\" 
         fileSaveName = wks.Name 

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



    Next 
End Sub 

есть ли способ заставить обновление/активацию для каждого из этих листов, чтобы вызвать автофильтр перед экспортом?

NB. Если я нажимаю каждый лист вручную перед экспортом, это нормально.

ответ

1

Вы можете добавить итерацию .Sheets коллекции и вызвать метод .Activate() для выполнения Worksheet_Activate() события (имитирует щелчок на каждой вкладке)

Ie.

Dim sh as Worksheet 
For Each sh in sheets 
    sh.Activate() 
Next 
Смежные вопросы