【问题标题】:Run VBA code automatically after running a filter运行过滤器后自动运行 VBA 代码
【发布时间】:2012-09-30 06:07:34
【问题描述】:

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

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

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

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

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

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

但我无法理解它。

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

【问题讨论】:

  • 请上传并链接到工作表,以便我们看到您在说什么。

标签: excel vba filter automation


【解决方案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() 中

【讨论】:

【解决方案2】:

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

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

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

如果希望以Manual 运行工作簿计算,则需要接下来的两个设置

  1. 添加Workbook_Open 事件,将“Dummy”以外的所有工作表的EnableCalculation 属性设置为False。
  2. 计算模式下运行工作簿

【讨论】:

  • 好文章,布雷特。我整理了一个测试文件(在我执行此操作时已回答问题),发现 Worksheet_Calculate 事件被多次调用,这是正常行为吗?
  • @brettdj - 链接的文章被删除:-(
  • @PeterAlbert 我已要求将其删除 - 将再次跟进。
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-19
    • 1970-01-01
    相关资源
    最近更新 更多