2012-10-09 45 views
2

我已经编写了一段代码,用于对员工及其资格进行分类。为了剔除具有不想要的资质的员工,我对每个标题为其资格类别的列应用了一个过滤器。运行过滤器后自动运行VBA代码

我写了我的VBA代码,为了便于定位,使得重复的名称和资格无形。但是,我无法让代码自动运行。

目前我能得到的代码运行的唯一方法是将其设置为

私人小组Worksheet_Change(BYVAL目标作为范围),然后更改任意单元格的值。

我找到了我认为是正确的解决方案在:

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

但我无法理解它。

有没有办法运行此代码,而不必在过滤器运行后选择和取消选择一个单元格?

+2

请上传并链接到一个工作表,所以我们可以看到你在说什么。 –

回答

0

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

3

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

还有更多的详细资料,以及文章的示例文件,要点归纳如下

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

    1. 添加Workbook_Open事件来设置比“虚拟”为False,其他所有工作表的EnableCalculation财产需要

    接下来的两个setps。

  3. 运行工作簿中计算模式
+0

好文章,布雷特。我把一个测试文件放在一起(问题在我这样做时得到了回答),并发现Worksheet_Calculate事件被多次调用,这是正常行为吗? – mkingston

+0

@brettdj - 链接的文章被删除:-( –

+1

@PeterAlbert我已经要求它被删除 - 将会再次跟进。 – brettdj

0

还需要调查,但看起来像表计算事件被触发时计算= xlCalculationManual。至少当在我的Excel 2007中因此,步骤是:

  • 创建一个图表(话说在Sheet1“图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
  • 变化的过滤器,你应该出现在子Chart_Calculate()