2012-10-09 48 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()