VBA Excel-如何知道特定单元格是否受任何宏的影响?
我有一个包含数百个宏的excel文件,其中的宏包含大量代码 我需要更改单元格的布局,这包括将一些单元格移动到另一个位置 我唯一的问题是,在这样做之后,我需要更改与该单元格交互的宏。当其值/公式更改或其值用于其他操作时进行交互 例如,我无法在代码中搜索范围(“C2”),因为单元格可能会受到不同形式的影响,如:VBA Excel-如何知道特定单元格是否受任何宏的影响?,vba,excel,Vba,Excel,我有一个包含数百个宏的excel文件,其中的宏包含大量代码 我需要更改单元格的布局,这包括将一些单元格移动到另一个位置 我唯一的问题是,在这样做之后,我需要更改与该单元格交互的宏。当其值/公式更改或其值用于其他操作时进行交互 例如,我无法在代码中搜索范围(“C2”),因为单元格可能会受到不同形式的影响,如: Range("C2") Cells(2, 3) Range("B1:E5") Range(Cells(1, 1), Cells(10, 10)) Offset 有什么方法可以让我发现哪些宏
Range("C2")
Cells(2, 3)
Range("B1:E5")
Range(Cells(1, 1), Cells(10, 10))
Offset
有什么方法可以让我发现哪些宏正在更改特定单元格吗?您是在寻找跟踪特定单元格的方法,还是跟踪受VBA代码影响的所有单元格的方法?此外,“值已更改”、“公式已更改”、“单元格与另一单元格合并”、“范围未合并”、“边框已更改”或“背景色已更改”中的“受影响”?添加条件格式是否“影响”单元格?数据验证 此外,还有更多的方式可以“影响”细胞。如果不在代码运行时跟踪代码,可能很难判断此
myRange
变量是否影响您要查找的单元格。。特别是使用Range.Offset
和Range.Resize
等方法时
然后可以命名范围,因此Range(“Foo”)
可能指的是您感兴趣的单元格,但如果不验证Names(“Foo”)。referestorange
是否包括该单元格,您就无法知道这一点
除非仔细检查代码,否则恐怕你不能
如果没有宏以亮黄色突出显示任何单元格,则始终可以制作文件的副本,然后在此工作簿中处理工作簿_SheetChange
:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Target.Interior.Color = vbYellow
End Sub
您可以轻松地在此处添加条件逻辑,以便仅从特定工作表或特定列或行重新收集或修改的单元格
现在删除或注释掉任何应用程序。EnableEvents
在代码中的任何地方切换,并运行宏-受影响的单元格(假设我们所追求的是值的变化)都应该是亮黄色
如果需要知道是什么代码导致了这种情况,可以在那里放置断点,并检查调用堆栈:
您是在寻找跟踪特定单元格的方法,还是在寻找跟踪受VBA代码影响的所有单元格的方法?此外,“值已更改”、“公式已更改”、“单元格与另一单元格合并”、“范围未合并”、“边框已更改”或“背景色已更改”中的“受影响”?添加条件格式是否“影响”单元格?数据验证
此外,还有更多的方式可以“影响”细胞。如果不在代码运行时跟踪代码,可能很难判断此myRange
变量是否影响您要查找的单元格。。特别是使用Range.Offset
和Range.Resize
等方法时
然后可以命名范围,因此Range(“Foo”)
可能指的是您感兴趣的单元格,但如果不验证Names(“Foo”)。referestorange
是否包括该单元格,您就无法知道这一点
除非仔细检查代码,否则恐怕你不能
如果没有宏以亮黄色突出显示任何单元格,则始终可以制作文件的副本,然后在此工作簿中处理工作簿_SheetChange
:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Target.Interior.Color = vbYellow
End Sub
您可以轻松地在此处添加条件逻辑,以便仅从特定工作表或特定列或行重新收集或修改的单元格
现在删除或注释掉任何应用程序。EnableEvents
在代码中的任何地方切换,并运行宏-受影响的单元格(假设我们所追求的是值的变化)都应该是亮黄色
如果需要知道是什么代码导致了这种情况,可以在那里放置断点,并检查调用堆栈:
如果宏代码因某些单元格移动到其他位置而受到影响,我想您需要检查宏代码。您可以锁定工作表的“保护工作表”功能。如果VBA window open宏试图修改此单元格,则会引发异常。缺点是每次VBA代码都会挂在同一个宏上,所以e。G必须对其进行注释,或者如果可能,请分别运行每个宏。此外,我假设这些宏将尝试向单元格写入内容。@Paul。Dirty
指定下次重新计算时要重新计算的范围。这是如何告诉您哪些单元格受到宏的影响的?不要忘记偏移、调整大小和相交于其他不明显的单元格。@Pᴇʜ-你完全正确。永远不要假设你是个傻瓜。。。在这种情况下,主要是我!您通常认为Dirty
意味着单元格已更改值:o)如果宏代码因将某些单元格移动到其他位置而受到影响,我想您需要查看宏代码。您可以锁定工作表的“保护工作表”功能。如果VBA window open宏试图修改此单元格,则会引发异常。缺点是每次VBA代码都会挂在同一个宏上,所以e。G必须对其进行注释,或者如果可能,请分别运行每个宏。此外,我假设这些宏将尝试向单元格写入内容。@Paul。Dirty
指定下次重新计算时要重新计算的范围。这是如何告诉您哪些单元格受到宏的影响的?不要忘记偏移、调整大小和相交于其他不明显的单元格。@Pᴇʜ-你完全正确。永远不要假设你是个傻瓜。。。在这种情况下,主要是我!您通常希望Dirty
表示单元格已更改值:o)不幸的是,这不会指示单元格何时“读取”或在条件中使用。@Jeeped我知道。。。OP不太清楚“受影响”代表什么though@MathieuGuindon因为他的价值观或公式被改变而受到影响,