2012-01-04 87 views
2

我有一個組合框與各種選項。對於每個選項,某些單元格基於這些值進行格式化。是否有excel vb的函數可以連續檢查表單?

由於數值每隔幾秒就會改變一次,程序需要檢查以確定條件是否滿足。有沒有人知道程序可以每隔幾秒鐘檢查一次表單的方式?

+0

我認爲組合框驅動單元格更改? – brettdj 2012-01-04 11:53:36

+0

是的。這一切都很好。但是單元格中的值隨着數據的變化而變化。 – Chane 2012-01-04 12:10:05

回答

0

根據您的需要,三種不同方法中的任何一種都可以滿足您的需求。

Excel Worksheet_Change事件在用戶更改工作表時觸發,排除由於重新計算而導致的單元格公式值的更改,但包括代碼更改。 VBA代碼通常看起來像:

Sub Worksheet_Change(ByVal Target As Range) 
     Application.EnableEvents = False 
     ' <test or set scope of action of the macro> 
     ' <do something> 
     Application.EnableEvents = True 
    End Sub 

target參數爲內置,始終是指改變並觸發事件的單元格。您的代碼必須放置在工作表模塊中(最容易通過右鍵單擊工作表選項卡並選擇查看代碼訪問),而不是標準模塊。

在重新計算工作表(包括自動重新計算)後發生Worksheet_Calculate事件。代碼如下所示:

Sub Worksheet_Calculate() 
     Application.EnableEvents = False 
     ' <do something> 
     Applicaton.EnableEvents = True 
    End Sub 

請注意,此事件不提供目標,那就是,它觸發所有單元重新計算,而不是單一的。如果您的代碼不強制重新計算,則不需要禁用然後重新啓用事件。如果您希望自己的代碼重新計算所選的單元格,您可以將計算設置爲手動(Application.Calculation = xlManual),然後在退出過程時將其重置爲自動(Application.Calculation = xlAutomatic)。與Worksheet_Change事件一樣,您的代碼必須放在工作表模塊中。

最後,您可以使用Excel的Application.OnTime事件或Windows定時器定期重新運行您的代碼。您的程序必須包含啓動計時器並停止的代碼。有關使用OnTime事件的示例,請參閱此SO answer。有關使用Windows計時器(以及Application.OnTime事件)的說明,請參閱Chip Pearson的審閱here