如果单元格的值发生变化则暂停宏

如果单元格的值发生变化则暂停宏

我有一个工作簿,里面有一组非常复杂的宏(有 100 个)。某个地方,其中一个宏有时会更改特定单元格中的值,但我不知道是哪一个。是否有办法在更改特定单元格时暂停 VBA 执行,以便我可以看到哪个 Sub 更改了它?

答案1

teylyn 的回答很棒;我使用了类似的前提,但不需要更新现有的宏,基本上在被监视的单元格更新时强制出现运行时错误

这是设置:用于监控单元格的 VBA 模块(在我的情况下是单元格 C3)

如果目标为 C3,则 _Change 事件触发除以 0:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Row = 3 And Target.Column = 3 Then Debug.Print 1 / 0
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    x1
End Sub

标准模块中的 3 个测试函数,每个测试函数更新单元格 A3、B3 和 C3:

Sub x1()
    Cells(3, 1) = Cells(3, 1) + 1
    x2
End Sub

Sub x2()
    Cells(3, 3) = Cells(3, 2) + 1
    x3
End Sub

Sub x3()
    Cells(3, 2) = Cells(3, 3) + 1
End Sub

当我改变工作表上的选择时,该过程开始并显示如下错误窗口:

在此处输入图片描述


我单击“调试”按钮,它会将我带到显示错误的 _Change 事件行:

在此处输入图片描述


此时我调出了调用堆栈(Ctrl+ L

这将显示所有拨打的电话,最新的电话位于顶部,因此双击上一个电话:

在此处输入图片描述


更新单元格的宏将有一个绿色三角形指向更新它的确切行

答案2

让每个宏在启动时调试并打印其名称。然后创建一个监视特定单元格的工作表更改事件。让更改事件弹出一条消息。转到“立即”窗口,查看在出现消息框之前启动了哪个宏。

在此处输入图片描述

相关内容