在单元格更改时自动执行Excelmacros

每当特定单元格中的值发生更改时,如何自动执行Excelmacros?

现在,我的工作代码是:

Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("H5")) Is Nothing Then Macro End Sub 

其中"H5"是被监视的特定单元, MacroMacro的名称。

有没有更好的办法?

你的代码看起来不错。

但要小心,Range(“H5”)是对Application.Range(“H5”)的快捷命令,相当于Application.ActiveSheet.Range(“H5”)。 如果唯一的变化是用户更改(这是最典型的),这可能会很好,但是如果工作表的单元格值不是通过编程更改(如VBA)的活动工作表进行更改。

考虑到这一点,我会利用Target.Worksheet.Range(“H5”):

 Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Target.Worksheet.Range("H5")) Is Nothing Then Macro End Sub 

或者你可以使用Me.Range(“H5”),如果事件处理程序在工作表的代码页上(通常是):

 Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Me.Range("H5")) Is Nothing Then Macro End Sub 

希望这可以帮助…

处理Worksheet_Change事件或Workbook_SheetChange事件。

事件处理程序将参数“Target As Range”作为参数,因此您可以检查正在更改的范围是否包含您感兴趣的单元格。

我更喜欢这种方式,不使用单元格,而是使用范围

  Dim cell_to_test As Range, cells_changed As Range Set cells_changed = Target(1, 1) Set cell_to_test = Range( RANGE_OF_CELLS_TO_DETECT ) If Not Intersect(cells_changed, cell_to_test) Is Nothing Then Macro End If 

我有一个连接到在线股票数据库和更新频繁的单元格。 我想要在单元格值更新时触发一个macros。

我相信这与程序或任何外部数据更新的单元格值更改类似,但上面的示例某种程度上不适用于我。 我认为这个问题是因为excel内部事件没有被触发,但那是我的猜测。

我做了以下,

 Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Target.Worksheets("Symbols").Range("$C$3")) Is Nothing Then 'Run Macro End Sub