我正在处理一个包含大量VBA代码的电子表格。大多数细胞参考使用数字,例如
Worksheets("Sheet1").Cells(someRow, someColumn)
我想知道是否有任何简单的方法可以确切地找出正在引用的单元格 - 是否可以在这行代码上放置一个断点,然后查看它将引用哪个单元格(使用传统的“BA10”) “风格”还是我必须每次使用 divs 和 mods 来计算它?
并非所有参考文献都是硬编码的,我真的希望能够找出数据的来源,因为访问单元格(不一定要更改)。
(编辑)是否可以在不更改原始源行的情况下执行此操作,例如在事件模块或什么?
答案 0 :(得分:5)
Debug.Print Worksheets(1).Cells(10, 53).Address(False, False)
返回BA10
答案 1 :(得分:2)
您可以使用地址。
Debug.print Worksheets(“Sheet1”)。Cells(10,53).Address
将在立即窗口中为您打印范围地址。
这就是你要找的东西吗?
答案 2 :(得分:2)
还有另一种选择。如果要对工作表进行更改,可以在工作表上捕获更改事件,并按如下方式输出更改的范围:
Private Sub Worksheet_Change(ByVal Target As Range)
Debug.Print "CHANGED -> " & Target.Address(False, False)
End Sub
对工作表的每次更改都将输出到您的立即窗口,如下所示:
CHANGED -> G10
CHANGED -> G11:G28
也有SelectionChange事件,但这不太可能太有用。没有“只读”细胞的事件。
答案 3 :(得分:1)
您还可以在以下位置将参考样式更改为R1C1: tools \ options \ general \ R1C1参考样式 通过这种方式,您将能够知道代码的裁判内容。
答案 4 :(得分:1)
另一种方法是在VBE(Visual Basic编辑器)中添加一个手表。您可以通过转到查看>观察窗口来确保观察窗口可见。然后从Debug菜单中单击Add Watch。如果你在休息模式下执行此操作,则已经为您设置了上下文,因此您只需粘贴您想要观看的表达式并且它将是可见的。这当然最适用于范围对象(例如:rngFoo.Address作为表达式),但是您可以粘贴诸如Worksheets(1).Cells(10,53).Address。
之类的东西。答案 5 :(得分:1)
使用以下命令知道哪个单元格正在调用该函数:
Application.Caller.Address
示例:
Function Addition(va As Double, vb As Double) As Double
Addition = va + vb
MsgBox "Cell calling function Addition is " & Application.Caller.Address
End Function
每当计算此函数时,消息框指示调用它的单元格地址。 请注意,从另一个VBA函数调用此函数将发送错误。查看http://www.cpearson.com/Excel/WritingFunctionsInVBA.aspx