是否有一种简单的方法可以让Excel在更改单元格时自动执行宏?
相关单元格位于Worksheet("BigBoard").Range("D2")
我认为简单的谷歌查询被证明更复杂 - 每个样本都涉及相交(无论是那些)或颜色格式或任何其他看似无关的事物。
答案 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