我有一个工作簿,里面有一组非常复杂的宏(有 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)
这将显示所有拨打的电话,最新的电话位于顶部,因此双击上一个电话:
更新单元格的宏将有一个绿色三角形指向更新它的确切行