每当更改单元格时,excel VBA会自动运行宏

kam*_*id2 22 excel vba

是否有一种简单的方法可以让Excel在更改单元格时自动执行宏?

有问题的细胞将在 Worksheet("BigBoard").Range("D2")

我认为简单的谷歌查询被证明是更复杂的 - 每个样本涉及交叉(无论是那些)或颜色格式或任何其他数量似乎无关紧要的事情.

Pet*_*ert 39

是的,这可以通过使用工作表事件来实现:

在Visual Basic编辑器中,双击左上角树中工作表的名称,打开您感兴趣的工作表(即"BigBoard").将以下代码放在模块中:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Me.Range("D2")) Is Nothing Then Exit Sub
        Application.EnableEvents = False 'to prevent endless loop
        On Error Goto Finalize 'to re-enable the events      
        MsgBox "You changed THE CELL!"
    End If
Finalize:        
    Application.EnableEvents = True
End Sub
Run Code Online (Sandbox Code Playgroud)

  • `Insersect(rng1,rng2)`返回两个输入范围"相交"的范围.因此,如果更改的单元格和D2的交集是空的,则更改其他内容并且您不希望宏进行处理.顺便说一句:如果它解决了您的问题,请点击复选标记将其标记为解决方案! (3认同)
  • +1告诉我在工作表中使用此代码,我在一个模块中使用它并且它没有工作,只要我把它放在工作表中,它工作:) (3认同)
  • 它测试 D2 是否在单元格范围内/或单元格已更改(即 - 目标的一部分)。如果不是,则代码退出。顺便说一句+1 (2认同)
  • @MarkRomano你是对的 - 如果出现错误,则不会重置启用事件.我扩展了代码. (2认同)

use*_*261 20

另一种选择是

Private Sub Worksheet_Change(ByVal Target As Range)
    IF Target.Address = "$D$2" Then
        MsgBox("Cell D2 Has Changed.")
    End If
End Sub
Run Code Online (Sandbox Code Playgroud)

我相信这会占用更少的资源Intersect,如果您的工作表发生了很大变化,这将会有所帮助.