2012-01-04 91 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