Я пишу функцию, которая возвращает значение в ячейку, в которую вставлена функция и каждый раз обновляется при изменении каких-либо ячеек. Вопрос, можно ли узнать текущую координату ячейки, в которую вставлена функция.
По другому вопрос. Можно ли узнать координаты ячейки в теле функции, относительно которой функция вызывается. Т.е. в ячейку пишу "=myFunc()", псевдо код функции
function myFunc(){ int x = thisCell.x int y = thisCell.y ... }
Я хочу посчитать сумму ячеек в, вычисляемой строке, до ячейки, в которую вставлена функция. Если сумма =0, то скрыть всю строку, если >0 - написать значение в ячейку, в которую вставлена функция-макрос. Такая вот автосумма с сокрытием строки при "пустых" результатах. Применяется в сводной таблице.
не очень хорошее, если пересчет книги будет на листе, отличном от того, в котором сама функция. Я более-менее подробно разбирал такую проблему в статье: Кто вызвал функцию или процедуру? Если кратко - Application.Caller
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
TheBestOfTheBest написал: "координаты" ячейки в которой используется UDF
Они-то не изменятся, а вот координаты ActiveCell - очень даже изменятся. Проведите эксперимент: создайте две UDF:
Код
'возвращает адрес активной ячейки активного листа, даже если активная ячейка в другой книге
Function GetActCell()
Application.Volatile True
GetActCell = "'GetActCell' return address: " & ActiveCell.Address(0, 0, xlA1, True)
End Function
'возвращает всегда адрес той ячейки, в которой записана
Function GetActCell_Caller()
Application.Volatile True
GetActCell_Caller = "'GetActCell_Caller' return address: " & Application.Caller.Address(0, 0, xlA1, True)
End Function
запишите одну в ячейку A1, вторую в A2. Теперь просто поперемещайтесь по листу, вводя в разные ячейки листа значения. И посмотрите, как будут изменяться возвращаемые значения каждой функции. При этом возвращаемое значение функции GetActCell будут изменяться даже если изменения были сделаны на другом листе другой книги - активной. Во вложении файл с функциями. Пощелкайте на листе с функциями. Потом перейдите на любой лист этой же книги - измените там какую-нибудь ячейку. Вернитесь на лист с функциями и посмотрите, что там насчиталось. Так же можно перейти в другую книгу и изменить что-то там. Вернуться и посмотреть результат...