我已经编写了一份代码,将员工及其资格分类。为了清除那些具有不良资格的员工,我已经为每个列标准了其资格类别的过滤器。
我已经编写了我的VBA代码,以便重复的名称和资格变得不可见,以便于定位。但是,我无法让代码自动运行。
目前我可以通过将代码设置为
来获取代码的唯一方法Private Sub Worksheet_Change(ByVal Target As Range),然后更改任意单元格的值。
我发现了我认为正确的解决方案:
http://www.ozgrid.com/forum/showthread.php?t=72860
但我无法理解它。
有没有办法运行此代码而无需在过滤器运行后选择和取消选择单元格?
答案 0 :(得分:3)
我的文章Trapping a change to a filtered list with VBA
的要点文章中有更多详细信息和示例文件,关键点总结如下
SUBTOTAL
中添加了一个“虚拟”工作表,其中包含一个A1
公式,指向主表上正在过滤的范围。Worksheet_Calculate()
公式更新时,将触发此事件。如果需要将工作簿计算作为SUBTOTAL
Manual
事件,将“Dummy”以外的所有工作表的Workbook_Open
属性设置为False。答案 1 :(得分:0)
您提到的ozgrid code告诉您,只要您在更改自动过滤器时有重新计算的内容,就可以将代码置于worksheet_calculate
事件中(在工作表模块中)。这个内容可以是您可以在工作表中隐藏的小计公式,例如=subtotal(3,A:A)
答案 2 :(得分:0)
仍然需要调查,但看起来像计算= xlCalculationManual时会触发Chart Calculate事件。至少适用于我的Excel 2007.所以步骤是:
创建一个新类,例如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