【发布时间】:2020-02-29 00:26:29
【问题描述】:
我有一本由其他人编写的工作簿,并且某个特定单元格正在被某些代码更改。我无法弄清楚改变单元格值的代码。
除了在数百个程序中设置断点之外,我什至无法找到缩小代码可能性的策略。所以我会对战略构想感到满意。
我在 Microsoft Access 中使用 VBA 非常有经验,在 Excel 中使用 VBA 也有一点经验。
编辑 得拉夫。我什至不能从一开始就通过代码 F8。我的意思是.. 在我更改工作表中的值(实际上是一年)后,有问题的单元格会发生变化。所以我设置了一个子程序和断点如下。
Private Sub Worksheet_Change(ByVal Target As Range)
End Sub '<== set breakpoint here
然后我按 F8,调试器没有输入其他代码,但单元格发生了变化。
问题可能是因为代码中正在进行大量的动态公式创建。没有把握。对 Excel 的怪癖了解不够。
编辑 2 有问题的单元格中缺少公式。很抱歉浪费了大家的时间。
那么缺少的公式如何改变单元格的值。不能! 问题应该是“如何确定一个单元格为什么没有变化”。 那我为什么不问呢?
我没有注意到与此单元格在同一列中的其他单元格包含公式。因为其他单元格正确更改了值而这个单元格没有正确更改,所以我认为是某些 VBA 代码无法正常工作,因此我试图追踪流氓代码。我想我不是一个经验丰富的 Excel 人,我不排除明显的流血,直接去了 VBA。呸!
【问题讨论】:
-
您可以使用工作表更改事件并设置相交目标与单元格范围并设置断点。远射,但也许会给你提示
-
按F8逐行运行代码,直到单元格内容发生变化,然后你就知道了?即使该行本身没有更改代码(可以调用另一个函数或过程),您也可以轻松地从那里回溯
-
锁定单元格并保护工作表。这将防止单元格值发生变化,并且可能会在尝试设置值时打开您正在寻找的代码:如果可能存在错误处理程序,则将您的 VBA 选项设置为“中断所有错误”
-
@Ricardo 我做了,但没有调用堆栈。
-
@Danny 我猜 F8 就可以了。