2

我有一个包含各种选项的组合框。对于每个选项,某些单元格都根据值进行格式化。

由于值每隔几秒就会改变一次,程序需要不断检查是否满足条件。有谁知道程序可以每隔几秒钟检查一次工作表的方法???

4

1 回答 1

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 评论。

于 2013-01-10T22:19:10.333 回答