【问题标题】:Clearing Excel AutoFilter using VBA使用 VBA 清除 Excel 自动筛选
【发布时间】:2019-06-02 17:33:46
【问题描述】:

我正在使用此 VBA 代码以特定时间间隔刷新整个工作簿。 (thanks to this thread)

如您所见,目前设置为每 60 分钟刷新一次。

Public RunWhen As Double
Public Const cRunIntervalMinutes = 60
Public Const cRunWhat = "Workbook_RefreshAll"

Sub StartTimer()
    RunWhen = Now + TimeSerial(0, cRunIntervalMinutes, 0)
    Application.OnTime earliesttime:=RunWhen, procedure:=cRunWhat, _
         schedule:=True
End Sub

Sub StopTimer()
   On Error Resume Next
   Application.OnTime earliesttime:=RunWhen, _
       procedure:=cRunWhat, schedule:=False
End Sub

Sub Workbook_RefreshAll()
    Application.CalculateFullRebuild
    ActiveWorkbook.RefreshAll
    Call StartTimer
End Sub

代码运行良好,但我希望它也能做一件事:

  1. 任何时候打开工作表,和/或
  2. 任何时候此 VBA 代码执行工作表刷新过程

我希望自动过滤器被“清除”(未禁用或关闭),如下面的屏幕截图所示:

AutoFilter Clear

提前感谢您的帮助。

干杯

【问题讨论】:

  • Any time the sheet is opened 是什么意思?当一张表改变?或者?第 2 点也更不清楚。

标签: excel vba


【解决方案1】:

这应该可以解决问题。如果您愿意,您当然可以只为一张 Sheet 这样做。

Sub Workbook_RefreshAll()
Dim sh As Worksheet
    Application.CalculateFullRebuild
    ActiveWorkbook.RefreshAll
    For Each sh In ActiveWorkbook.Worksheets
        If Not (sh.AutoFilter Is Nothing) Then sh.AutoFilter.ShowAllData
    Next sh
    Call StartTimer
End Sub

【讨论】:

  • 非常感谢沃尔夫冈。您能否让我知道这段代码与我现有的 VBA 的关系。例如,它属于上面、下面还是单独的模块?谢谢。如果您不介意,最后一个问题是:除了完全清除自动过滤器之外,还有什么方法可以清除自动过滤器,然后将其恢复为设置的任何设置。或者,是否只能完全清除 AutoSetting 过滤器。再次非常感谢您的及时和慷慨的支持。干杯
  • Wolfgang -- 请忽略上面的帖子。我在编辑时遇到了超时。这是它应该说的: -------- 非常感谢 Wolfgang。您能否让我知道这段代码与我现有的 VBA 的关系。例如,它属于上面、下面还是单独的模块?谢谢。如果您不介意最后一个问题:如果我只想“重新应用”自动过滤器而不是清除自动过滤器,这段代码将如何改变?再次非常感谢您的及时和慷慨的支持。干杯
  • 第一个:我的Workbook_RefreshAll() 将取代您的Workbook_RefreshAll()。如您所见,我只是做了一些插入。
  • 第二个:使用If Not (sh.AutoFilter Is Nothing) Then sh.AutoFilter.ApplyFilter而不是If Not (sh.AutoFilter Is Nothing) Then sh.AutoFilter.ShowAllData重新应用当前过滤器。
  • 非常感谢沃尔夫冈。我会测试。非常感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-06
相关资源
最近更新 更多