如果单元格更改值,则暂停宏

Ada*_*dam 3 vba microsoft-excel

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

pau*_*ica 5

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

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

如果 Target 是 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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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

在此处输入图片说明


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

在此处输入图片说明


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

这会显示所有的调用,最后一个在顶部,所以双击前一个:

在此处输入图片说明


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