在PDF导出之前以编程方式更新自动筛选器

时间:2014-08-28 08:29:27

标签: excel vba excel-vba autofilter

我有一些代码可以根据数组创建大量工作表(通过复制现有的主工作表),然后应用自动过滤器。

以下是我用来应用自动过滤器的代码,因为您可以看到它被配置为应用于正在激活的工作表和任何单元格更改。

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 个答案:

答案 0 :(得分:1)

您可以添加.Sheets集合的迭代并调用.Activate()方法来执行Worksheet_Activate()事件(模拟单击每个标签)< / p>

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