是否有一种简单的方法可以让 Excel 在更改单元格时自动执行宏?
有问题的单元格将在Worksheet("BigBoard").Range("D2")
我认为简单的谷歌查询被证明更复杂 - 每个样本都涉及相交(无论是什么)或颜色格式或任何其他看似无关的事物。
是的,这可以通过使用工作表事件来实现:
在 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
另一种选择是
Private Sub Worksheet_Change(ByVal Target As Range)
IF Target.Address = "$D$2" Then
MsgBox("Cell D2 Has Changed.")
End If
End Sub
我相信这比 使用的资源更少Intersect
,如果您的工作表发生很大变化,这将很有帮助。
为了找到一种方法,使 intersect 方法的目标单元格成为名称表数组,我偶然发现了一种简单的方法,可以在特定工作表上的任何单元格或一组单元格发生更改时运行某些东西。此代码也放置在工作表模块中:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 0 Then
'mycode here
end if
end sub
为了发现特定列中某处的更改(此处为“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
我正在创建一个表单,其中用户输入另一个宏使用的电子邮件地址,以通过电子邮件将特定单元组发送到输入的地址。我将这个来自多个站点的简单代码和我对 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