Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA Excel-如何知道特定单元格是否受任何宏的影响?_Vba_Excel - Fatal编程技术网

VBA Excel-如何知道特定单元格是否受任何宏的影响?

VBA Excel-如何知道特定单元格是否受任何宏的影响?,vba,excel,Vba,Excel,我有一个包含数百个宏的excel文件,其中的宏包含大量代码 我需要更改单元格的布局,这包括将一些单元格移动到另一个位置 我唯一的问题是,在这样做之后,我需要更改与该单元格交互的宏。当其值/公式更改或其值用于其他操作时进行交互 例如,我无法在代码中搜索范围(“C2”),因为单元格可能会受到不同形式的影响,如: Range("C2") Cells(2, 3) Range("B1:E5") Range(Cells(1, 1), Cells(10, 10)) Offset 有什么方法可以让我发现哪些宏

我有一个包含数百个宏的excel文件,其中的宏包含大量代码

我需要更改单元格的布局,这包括将一些单元格移动到另一个位置

我唯一的问题是,在这样做之后,我需要更改与该单元格交互的宏。当其值/公式更改或其值用于其他操作时进行交互

例如,我无法在代码中搜索范围(“C2”),因为单元格可能会受到不同形式的影响,如:

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因为他的价值观或公式被改变而受到影响,