运行过滤器后自动运行VBA代码

时间:2012-10-09 20:36:25

标签: excel vba filter automation

我已经编写了一份代码,将员工及其资格分类。为了清除那些具有不良资格的员工,我已经为每个列标准了其资格类别的过滤器。

我已经编写了我的VBA代码,以便重复的名称和资格变得不可见,以便于定位。但是,我无法让代码自动运行。

目前我可以通过将代码设置为

来获取代码的唯一方法

Private Sub Worksheet_Change(ByVal Target As Range),然后更改任意单元格的值。

我发现了我认为正确的解决方案:

http://www.ozgrid.com/forum/showthread.php?t=72860

但我无法理解它。

有没有办法运行此代码而无需在过滤器运行后选择和取消选择单元格?

3 个答案:

答案 0 :(得分:3)

我的文章Trapping a change to a filtered list with VBA

的要点

文章中有更多详细信息和示例文件,关键点总结如下

  1. SUBTOTAL中添加了一个“虚拟”工作表,其中包含一个A1公式,指向主表上正在过滤的范围。
  2. “{1}}事件被添加到”虚拟“工作表中,当更改过滤器时Worksheet_Calculate()公式更新时,将触发此事件。
  3. 如果需要将工作簿计算作为SUBTOTAL

    运行,则需要接下来的两个setps
    1. 添加Manual事件,将“Dummy”以外的所有工作表的Workbook_Open属性设置为False。
    2. 计算模式
    3. 运行工作簿

答案 1 :(得分:0)

您提到的ozgrid code告诉您,只要您在更改自动过滤器时有重新计算的内容,就可以将代码置于worksheet_calculate事件中(在工作表模块中)。这个内容可以是您可以在工作表中隐藏的小计公式,例如=subtotal(3,A:A)

答案 2 :(得分:0)

仍然需要调查,但看起来像计算= xlCalculationManual时会触发Chart Calculate事件。至少适用于我的Excel 2007.所以步骤是:

  • 创建一个图表(在Sheet1上说“Chart 1”),它实际上使用来自任何表格列的数据
  • 检查更改过滤器时是否更新其图片
  • 创建一个新类,例如clsChartEvents:

    Public WithEvents Chart As Chart
    Private Sub Chart_Calculate()
      Stop
    End sub
    
  • 将此代码添加到某个模块或类中:

    Private chartEvents as new ChartEvents 'create a module-scope variable
    sub SubscribeToChartEvents
      set chartEvents.Chart = Sheet1.ChartObjects("Chart 1").Chart
    end sub
    
  • 执行SubscribeToChartEvents
  • 更改过滤器,您应该出现在Sub Chart_Calculate()