Простой способ найти ссылку на ячейку в Excel VBA - PullRequest
2 голосов
/ 11 июня 2009

Я работаю над таблицей с большим количеством кода VBA. В большинстве ссылок на ячейки используются числа, например

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

Мне интересно, есть ли какой-нибудь простой способ точно определить, на какую ячейку ссылаются - можно ли поставить точку останова в этой строке кода, а затем посмотреть, на какую ячейку она будет ссылаться (используя традиционный "BA10" "стиль) или мне придется рассчитывать его каждый раз, используя divs и моды ?

Не все ссылки жестко запрограммированы, и мне бы очень хотелось выяснить, откуда извлекаются данные, когда осуществляется доступ к ячейке (необязательно измененная).

(правка) Возможно ли это сделать без изменения исходной строки источника, например, в модуле событий или что-то?

Ответы [ 6 ]

5 голосов
/ 11 июня 2009
Debug.Print Worksheets(1).Cells(10, 53).Address(False, False)

возвращает BA10

2 голосов
/ 17 июня 2009

Есть еще один вариант. Если вы вносите изменения в лист, вы можете перехватить событие Change на рабочем листе и выкачать измененный диапазон следующим образом:

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

Каждое изменение в листе будет выводиться в ваше окно Immediate, например:

CHANGED -> G10
CHANGED -> G11:G28

Также есть событие SelectionChange, но вряд ли оно будет слишком полезным. Нет события только для «чтения» ячеек.

2 голосов
/ 11 июня 2009

Вы можете использовать адрес.

Рабочие листы Debug.print ("Лист1"). Ячейки (10, 53). Адрес

Распечатает адрес диапазонов для вас в «Немедленном окне».

Это то, что вы ищете?

1 голос
/ 13 февраля 2013

Используйте следующее, чтобы узнать, какая ячейка вызывает функцию:

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

1 голос
/ 11 июня 2009

Другим способом было бы добавить часы в VBE (редактор Visual Basic). Вы можете сделать это, перейдя в View> Watch Window, чтобы убедиться, что окно наблюдения видно. Затем в меню «Отладка» нажмите «Добавить часы». Если вы сделаете это в режиме прерывания, контекст уже будет установлен для вас, поэтому все, что вам нужно сделать, это вставить в выражение, которое вы хотите посмотреть, и оно будет видно. Это, конечно, лучше всего работает с объектами диапазона (например, rngFoo.Address в качестве выражения), но вы можете вставить такие вещи, как Worksheets (1) .Cells (10, 53) .Address.

1 голос
/ 11 июня 2009

Вы также можете изменить свой ссылочный стиль на R1C1 в: tools \ options \ general \ R1C1 эталонный стиль Таким образом, вы сможете узнать, на что ссылается код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...