3

我编写了一个代码,将员工及其资格分类。为了剔除具有不想要的资格的员工,我对每一列都应用了一个过滤器,以他们的资格类别为标题。

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

目前我可以让代码运行的唯一方法是将其设置为

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

我在以下位置找到了我认为正确的解决方案:

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

但我无法理解它。

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

4

3 回答 3

3

我的文章使用 VBA 捕获对过滤列表的更改的关键点

有更多的细节和文章的示例文件,关键点总结如下

  1. 添加了一个“虚拟”工作表,其中包含一个SUBTOTAL公式,以A1指向在主工作表上过滤的范围。
  2. 一个事件被添加到“虚拟”工作表中,当过滤器更改时公式更新时Worksheet_Calculate()触发此事件。SUBTOTAL

如果希望将工作簿计算运行为Manual

  1. 添加一个Workbook_Open事件以将EnableCalculation除“Dummy”之外的所有工作表的属性设置为 False。
  2. 在计算模式下运行工作簿
于 2012-10-10T00:00:07.237 回答
1

仍然需要调查,但看起来当 Calculation = xlCalculationManual 时触发了 Chart Calculate 事件。至少适用于我的 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
    
  • 执行订阅图表事件
  • 更改过滤器,您应该出现在 Sub Chart_Calculate()
于 2014-09-30T18:54:16.447 回答
1

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

于 2012-10-09T21:52:41.127 回答