我有一些代码可以根据数组创建大量工作表(通过复制现有的主工作表),然后应用自动过滤器。
以下是我用来应用自动过滤器的代码,因为您可以看到它被配置为应用于正在激活的工作表和任何单元格更改。
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。如果我在导出之前手动点击每张纸,那就没问题了。
答案 0 :(得分:1)
您可以添加.Sheets
集合的迭代并调用.Activate()
方法来执行Worksheet_Activate()
事件(模拟单击每个标签)< / p>
即
Dim sh as Worksheet
For Each sh in sheets
sh.Activate()
Next