![当数据改变时,如何自动刷新 Excel 自动过滤器?](https://linux22.com/image/1266491/%E5%BD%93%E6%95%B0%E6%8D%AE%E6%94%B9%E5%8F%98%E6%97%B6%EF%BC%8C%E5%A6%82%E4%BD%95%E8%87%AA%E5%8A%A8%E5%88%B7%E6%96%B0%20Excel%20%E8%87%AA%E5%8A%A8%E8%BF%87%E6%BB%A4%E5%99%A8%EF%BC%9F.png)
当数据改变时,如何自动刷新 Excel 自动过滤器?
用例:我将一个单元格的值更改为已过滤的值。我想看到当前行消失,而无需执行任何其他操作。
答案1
用这个交换代码似乎也能解决问题(至少在 Excel 2010 中):
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.AutoFilter.ApplyFilter
End Sub
答案2
只是为了巩固答案:
索林说:
右键单击工作表名称,选择“查看代码”并粘贴下面的代码。粘贴后,单击左上角“文件”下方的 Excel 图标,或按 Alt-F11,返回电子表格视图。
这将启用自动刷新。不要忘记将文件保存为支持宏的格式,例如 .xlsm。
克里斯使用了这个代码(我刚刚在 2010 年做过):
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.AutoFilter.ApplyFilter
End Sub
如果您不展开帖子,您只会看到长答案!;)
答案3
我发现当我使用表格时,这不起作用。过滤器不在工作表上,而是在表格上。此代码成功了
Private Sub Worksheet_Change(ByVal Target As Range)
With ActiveWorkbook.Worksheets("Sheet1").ListObjects("Table1")
.AutoFilter.ApplyFilter
End With
End Sub
我在这里找到了信息:http://www.jkp-ads.com/articles/Excel2007TablesVBA.asp
答案4
我也使用基于Worksheet_Change
事件的 VBA/Macro,但我的方法略有不同...好的,首先是代码,然后是解释:
Private Sub Worksheet_Change(ByVal Target As Range)
' first remove filter
ActiveSheet.Range("$L$1:$L$126").AutoFilter Field:=1
' then apply it again
ActiveSheet.Range("$L$1:$L$126").AutoFilter Field:=1, Criteria1:="<>0"
End Sub
(使用Alt+F11键组合使开发面板出现并将代码粘贴到包含您想要自动刷新的过滤器的工作表中。)
在我的示例中,我假设在单个列(在我的例子中是 L)上有一个简单的过滤器,并且我的数据范围是从 1(即使它可能包含标题)到 126(选择一个足够大的数字以确保)的行。操作很简单:当我的工作表上发生某些更改时,指定范围上的过滤器将被移除/重新应用,以便刷新它。这里需要解释一下的是场地和标准。
这场地是范围的整数偏移量。在我的例子中,我只有一个列过滤器,并且范围由单个列 (L) 构成,该列是范围中的第一列(因此我使用 1 作为值)。
这标准是描述应用于数据范围的过滤器的字符串。在我的示例中,我只想显示 L 列不为 0 的行(因此我使用了“<>0”)。
就这样。有关 Range.AutoFilter 方法的更多参考,请参阅:https://msdn.microsoft.com/en-us/library/office/ff193884.aspx