2014-08-28 40 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 

有没有办法来强制这些表的更新/激活触发导出之前自动筛选?

注意:如果我在导出之前手动点击每张纸,那就没问题。

回答

1

可以添加.Sheets集合的迭代,并调用.Activate()方法执行Worksheet_Activate()事件(模拟每个选项卡上点击)

IE浏览器。

Dim sh as Worksheet 
For Each sh in sheets 
    sh.Activate() 
Next