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

时间:2013-03-11 11:05:51

标签: excel vba

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

相关单元格位于Worksheet("BigBoard").Range("D2")

我认为简单的谷歌查询被证明更复杂 - 每个样本都涉及相交(无论是那些)或颜色格式或任何其他看似无关的事物。

5 个答案:

答案 0 :(得分:38)

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

在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

答案 1 :(得分:18)

另一种选择是

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

我认为这比Intersect使用的资源更少,如果您的工作表发生了很大变化,这将会有所帮助。

答案 2 :(得分:4)

为了找到一种方法使交叉方法的目标单元格成为名称表数组,我偶然发现了一种简单的方法,当特定工作表上的任何单元格或单元格集发生变化时运行。此代码也放在工作表模块中:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 0 Then
'mycode here
end if
end sub

答案 3 :(得分:1)

我正在创建一个表单,其中用户输入另一个宏使用的电子邮件地址,以将特定的单元格组通过电子邮件发送到所输入的地址。我从几个站点将这些简单的代码拼凑在一起,并且我对VBA的了解有限。这只是监视要更新的一个单元格(在我的情况下为K22),然后杀死该单元格中的所有超链接。

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim KeyCells As Range

    ' The variable KeyCells contains the cells that will
    ' cause an alert when they are changed.
    Set KeyCells = Range("K22")

    If Not Application.Intersect(KeyCells, Range(Target.Address)) _
           Is Nothing Then

        Range("K22").Select
        Selection.Hyperlinks.Delete

    End If 
End Sub

答案 4 :(得分:0)

为了发现特定列中某处的变化(此处为“W”,即“23”),我修改了Peter Alberts的回答:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Target.Column = 23 Then Exit Sub
    Application.EnableEvents = False             'to prevent endless loop
    On Error GoTo Finalize                       'to re-enable the events
    MsgBox "You changed a cell in column W, row " & Target.Row
    MsgBox "You changed it to: " & Target.Value
Finalize:
    Application.EnableEvents = True
End Sub