2009-06-10 100 views
2

我正在制作一个包含大量VBA代码的电子表格。大多数小区参考使用数字,例如在excel vba中找到单元格引用的简单方法

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

我想知道是否有任何简单的方法来找出到底是哪个小区被引用 - 是有可能把一个断点在此行的代码,然后看看它会指的是电池(使用传统的“BA10”风格)还是必须每次都使用divmods

不是所有的引用都是硬编码的,我真的很希望能够计算出数据从哪里被取出,因为单元被访问(不一定会改变)。

(编辑)是否可以在不更改原始源代码行的情况下执行此操作(例如,在事件模块或什么的?

回答

2

还有另一种选择。如果你正在改变一个表,你可以赶上在工作表更改事件,并泵出改变的范围,像这样:

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

每个改变纸张将输出到您喜欢这样立即窗口:

CHANGED -> G10 
CHANGED -> G11:G28 

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

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

回报BA10

2

您可以使用地址。

Debug.print工作表( “工作表Sheet1”)。电池(10,53)。地址

将打印范围在立即窗口地址为您服务。

这是你在找什么?

+0

排序的,但这样做,这将意味着我不得不使用多个语句或更改变量名称每次 - 有没有办法做到这一点自动基于什么接下来将执行? – 2009-06-10 23:46:43

+0

这是做到这一点的最好办法。没有自动的方式去做你想做的事。但是你可以用你的变量“Debug.Print iColumn”。 – JustPlainBill 2009-06-11 12:45:58

1

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

+0

这并使其更容易看到哪个小区被提及,但我还是必须使用手表或东西就能找出单元格引用是什么 – 2009-06-12 01:04:28

1

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

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