运行filter后自动运行VBA代码
我写了一个代码,将员工和他们的资格分类。 为了淘汰不合格资质的员工,我对每个栏目都加了一个filter,标明他们的资格类别。
我写了我的VBA代码,以便重复的名称和资格是为了便于定位而隐形的。 但是,我无法让代码自动运行。
目前,我可以让代码运行的唯一方法是将其设置为
Private Sub Worksheet_Change(ByVal Target As Range),然后更改任意单元格的值。
我发现我认为是正确的解决scheme:
http://www.ozgrid.com/forum/showthread.php?t=72860
但我无法理解它。
有没有办法运行这个代码,而不必select和取消selectfilter运行后的单元格?
我的文章中的关键点将变更陷入使用VBA的过滤列表
文章中有更多的细节和示例文件,重点摘要如下
- 在
A1
添加一个“虚拟”工作表,使用单个SUBTOTAL
公式,指向主工作表上正在过滤的范围。 -
Worksheet_Calculate()
事件被添加到“虚拟”工作表中,当事件filter更改时,SUBTOTAL
公式更新时触发此事件。
如果需要以Manual
运行“工作簿计算”,则需要接下来的两个设置
- 添加
Workbook_Open
事件,将除“Dummy”之外的所有工作表的EnableCalculation
属性设置为False。 - 以计算模式运行工作簿
你提到的ozgrid代码告诉你,你可以把你的代码放在worksheet_calculate
表模块中的worksheet_calculate
事件中,只要你有更改自动filter时会重新计算的东西。 这个东西可以是你可以隐藏在工作表中的小计公式,例如=subtotal(3,A:A)
仍然需要调查,但看起来像Chart Calculate事件是在Calculation = xlCalculationManual时触发的。 至less在我的Excel 2007上工作。所以这些步骤是:
- 创build一个图表(在Sheet1上说“图表1”),它实际上使用来自任何表格列的数据
- 检查更改filter时是否更新其图片
-
创build一个新的类,例如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
- 更改filter,你应该出现在Sub Chart_Calculate()