简单的方法来findexcel vba中的单元格引用

我正在制作一个有很多VBA代码的电子表格。 大多数单元格引用使用数字,例如

Worksheets("Sheet1").Cells(someRow, someColumn) 

我想知道是否有任何简单的方法来找出究竟哪个单元格被引用 – 是否有可能在这行代码上放置一个断点,然后看看它将引用哪个单元格(使用传统的“BA10”样式)或者我将不得不每次使用divmod来计算它?

并不是所有的引用都是硬编码的,而且我真的希望能够在数据被访问的地方(不一定改变)访问数据。

(编辑)是否有可能做到这一点,而不改变原来的源代码行,例如在事件模块或其他东西?

还有另一种select。 如果您正在对工作表进行更改,则可以捕获工作表上的更改事件,然后像下面一样抽出更改后的范围:

 Private Sub Worksheet_Change(ByVal Target As Range) Debug.Print "CHANGED -> " & Target.Address(False, False) End Sub 

对表单的每一个改变都将被输出到你的即时窗口,就像这样:

 CHANGED -> G10 CHANGED -> G11:G28 

还有SelectionChange事件,但这不太可能太有用。 没有“阅读”单元的事件。

 Debug.Print Worksheets(1).Cells(10, 53).Address(False, False) 

返回BA10

您可以使用地址。

Debug.print Worksheets(“Sheet1”)。Cells(10,53).Address

将在即时窗口中打印您的范围地址。

那是你在找什么?

您也可以在:tools \ options \ general \ R1C1引用样式中将您的引用样式更改为R1C1,这样您将能够知道代码正在裁判的内容。

另一种方法是在VBE(Visual Basic编辑器)中添加一个手表。 您可以通过查看>观察窗口来确保观察窗口可见。 然后从debugging菜单上单击添加监视。 如果您在中断模式下执行此操作,上下文将已经为您设置,所以您只需粘贴要观看的expression式即可。 这当然最适用于范围对象(例如:rngFoo.Address作为expression式),但可以粘贴诸如Worksheets(1).Cells(10,53).Address之类的东西。

使用以下来了解哪个单元格正在调用该函数:

 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