Shishona想知道打开每种工作簿时Excel是否有一种启用/设置筛选器的方法。她几乎总是在工作表中使用过滤器,并且不相信在不使用过滤器的工作簿上使用过滤器不会有任何危害。而是每次打开工作簿时都启用过滤器,她希望它们已经打开。

您可能猜到的答案完全取决于“默认”的含义。如果工作表不包含任何数据(因为没有要过滤的内容),Excel将不允许您打开过滤器,因此“默认”不能表示新的空白工作簿。

由于只能在包含数据的工作表上启用筛选器,因此可以创建一个包含数据并打开筛选器的“默认工作簿”。然后将该工作簿保存在系统上的特殊位置,以便可以将其用作您创建的任何新工作簿的默认模板。 (_ExcelTips_的其他问题已经介绍了如何执行此操作。)

当然,采用这种方法可能会带来更多麻烦,因为创建新工作簿后可能需要删除默认的过滤数据,这意味着无论如何都将删除过滤。因此,最好不要弄乱默认的工作簿方法。

相反,您可能意味着要在打开现有工作簿时自动启用筛选。在Excel中无法自动执行此操作,但您可能不需要这样做。原因是因为在保存工作簿时,Excel会记住对哪些数据应用了过滤器。因此,如果您创建工作表并打开过滤,然后保存工作簿,则下次打开它时,该数据上的过滤器仍将打开。

您还可以确保将工作表中的数据定义为正式数据表。您需要做的就是在数据中选择一个单元格,然后按Ctrl + T或显示功能区的“插入”选项卡,然后单击“表格”工具。设置完数据表后,Excel会保留该数据表的筛选器处于打开状态,除非您将其从数据表转换回常规数据。

如果您担心保存工作簿时过滤器会关闭(或根本没有打开),则可以向宏中添加宏以逐步浏览工作表并打开过滤。下面的示例做到了这一点,而忽略了可能已经启用了筛选的所有工作表。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, _   Cancel As Boolean)

Dim ws As Worksheet

On Error Resume Next ' Handles worksheets with no data     For Each ws In ThisWorkbook.Worksheets         If ws.AutoFilter Is Nothing Then             ' Only affect worksheets with filtering turned off             ws.Rows(ws.UsedRange.Row).AutoFilter         End If     Next ws     On Error GoTo 0 End Sub

该宏应添加到Visual Basic编辑器中的ThisWorkbook对象中。它将在每次关闭工作簿时执行,从而确保为每个工作表打开筛选。由于筛选状态与工作簿一起保存,因此下次打开工作簿时,筛选器将就位。

当然,您可能不希望将宏与每个工作簿相关联。在这种情况下,记住一个快速的键盘快捷键可能很简单:Ctrl + Shift + L。此快捷方式可在当前所选单元格周围的数据上切换过滤状态。因此,您可以选择一个单元格,按Ctrl + Shift + L,然后打开过滤。再按一次,过滤功能将关闭。该快捷方式非常快捷,可让您轻松(或不轻松)过滤数据。

您还可以将过滤器工具添加到快速访问工具栏。 (ExcelTips的其他问题已涵盖向QAT添加工具。)单击“过滤器”图标以打开或关闭过滤。

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本提示(13037)适用于Microsoft Excel 2007、2010、2013、2016、2019和Office 365中的Excel。