Function CellAddress()
CellAddress = Application.ThisCell.Address
End Function
VBA Excell. Как узнать внутри функции адрес ячейки из которой функция вызвана?
Подробнее. Аргументы функции находятся в соседнем столбце начинась за 10 строк до "строки вызова функции" и до "строки вызова функции" необходимо произвести с ними некоторые "сложные" действия. Необходимо знать "строку вызова функции".
Цитата:
Originally posted by Guest
VBA Excell. Как узнать внутри функции адрес ячейки из которой функция вызвана?
Подробнее. Аргументы функции находятся в соседнем столбце начинась за 10 строк до "строки вызова функции" и до "строки вызова функции" необходимо произвести с ними некоторые "сложные" действия. Необходимо знать "строку вызова функции".
VBA Excell. Как узнать внутри функции адрес ячейки из которой функция вызвана?
Подробнее. Аргументы функции находятся в соседнем столбце начинась за 10 строк до "строки вызова функции" и до "строки вызова функции" необходимо произвести с ними некоторые "сложные" действия. Необходимо знать "строку вызова функции".
спустя 3 года :D :
Function addr(r As Variant)
addr = r.DirectDependents.Address(ReferenceStyle:=xlR1C1)
End Function
r - любой аргумент из этой же строки
MsgBox Application.Caller.Address
My_Func = 1
End Function
Код:
Примечание : Свойство ThisCell появилось только в MS Excel XP, так что рекомендую обратить внимание на второй вариант, тем более, что именно его я иногда использовал.
Цитата:
Originally posted by pashulka
Ну раз пошла такая пьянка, то и я внесу свою лепту :
Примечание : Свойство ThisCell появилось только в MS Excel XP, так что рекомендую обратить внимание на второй вариант, тем более, что именно его я иногда использовал.
Ну раз пошла такая пьянка, то и я внесу свою лепту :
Код:
Function CellAddress()
CellAddress = Application.ThisCell.Address
End Function
CellAddress = Application.ThisCell.Address
End Function
Примечание : Свойство ThisCell появилось только в MS Excel XP, так что рекомендую обратить внимание на второй вариант, тем более, что именно его я иногда использовал.
pashulka, а второй вариант - это какой? Тот, который привёл sergeyvg, или тот, который привёл Uncle_AL?
Второй - это вариант sergeyvg, так как Uncle_AL опубликовал свою версию решения этой задачи первым.
еще вопрсик, а у самого EXCELL есть функция (или переменная) чтобы узнать имя книги, аналог ThisWorkbook.Name в VBA, для передачи в качестве параметра в функцию ?
=ПСТР(ЯЧЕЙКА("ИмяФайла";A1);ПОИСК("[";ЯЧЕЙКА("ИмяФайла";A1))+1;ПОИСК("]";ЯЧЕЙКА("ИмяФайла";A1))-ПОИСК("[";ЯЧЕЙКА("ИмяФайла";A1))-1)
=ПСТР(ЯЧЕЙКА("FileName";A1);ПОИСК("[";ЯЧЕЙКА("FileName";A1))+1;ПОИСК("]";ЯЧЕЙКА("FileName";A1))-ПОИСК("[";ЯЧЕЙКА("FileName";A1))-1)
Примечание :
- В вышеопубликованной формуле можно вместо ПОИСК() использовать НАЙТИ()
- Если использовать именованную формулу или дополнительную ячейку, то формулу можно серьёзно сократить.
- Только, что созданная и несохранённая рабочая книга не имеет полного имени и следовательно формула не будет возвращать корректный результат.
в английском =MID(CELL("filename");SEARCH("[";CELL("filename"))+1;SEARCH("]";CELL("filename"))-SEARCH("[";CELL("filename"))-1) - работает
вот и именнованная =FILENAME нарисовалась :)
=ПСТР(ИмяП;ПОИСК("[";ИмяП)+1;ПОИСК("]";ИмяП)-ПОИСК("[";ИмяП)-1)
Комментарий : Довольно часто в различных формулах используется одна и таже составляющая. Именно в таких случаях предложенный мною вариант будет наиболее оптимальным.
В Вашем конкретном случае, в роли именованной формулы, конечно может выступать вся формула целиком, но лично мне нравится именно мой вариант, так как используя именно его, можно полученить и другие составляющие, например имя рабочего листа (правда для этого именованную формулу лучше всего немного изменить и добавить ссылку на ячейку, так как это сделано в самом первом примере)
=ПОЛУЧИТЬ.РАБОЧУЮ.КНИГУ(16)
=ПОЛУЧИТЬ.ДОКУМЕНТ(88)
=ПОЛУЧИТЬ.ЯЧЕЙКУ(66)
Затем в любой ячейке рабочего листа ввести =ФайлИмя и забыть о решении этого вопроса с использованием VBA …
вероятнее всего понадобится ссылка на лист с базой данных, но у меня на таких листах именованные ячейки не водятся, это роскошь для листов с исходными и расчетных листов, кстати и на последних именованные диапазоны давно вымерли;
а вообще приятно встретить людей серьезно понимающих EXCELL :)
Цитата:
Originally posted by pashulka
...
=ПОЛУЧИТЬ.РАБОЧУЮ.КНИГУ(16)
=ПОЛУЧИТЬ.ДОКУМЕНТ(88)
=ПОЛУЧИТЬ.ЯЧЕЙКУ(66)
…
...
=ПОЛУЧИТЬ.РАБОЧУЮ.КНИГУ(16)
=ПОЛУЧИТЬ.ДОКУМЕНТ(88)
=ПОЛУЧИТЬ.ЯЧЕЙКУ(66)
…
можно ли привести английские аналоги ?
=GET.WORKBOOK(16)
=GET.DOCUMENT(88)
=GET.CELL(66)
Цитата:
Originally posted by pashulka
=GET.WORKBOOK(16)
=GET.DOCUMENT(88)
=GET.CELL(66)
=GET.WORKBOOK(16)
=GET.DOCUMENT(88)
=GET.CELL(66)
можно ли пояснить,
в Вашей версии имеются такие функции ?
у себя (2003) не нахожу
Впрочем, возможно что последней возможности в MS Excel XP, 2003 уже и нет ...
На всякий случай, посмотрите небольшой пример :
вероятно EXCELL записывет значения таких имен на момент создания или модификации (если зайти в окно определения имен и активировать путь) и больше не меняет (считаются константой);
самое интересное, что про GET в хелпе нет ни слова, а хорошая функция, если бы еще на обычном листе работала.
Возможно в Вашем случае, гораздо проще остановить свой выбор на первом варианте, с использованием стандартной функции рабочего листа =ЯЧЕЙКА()/CELL()
Попробуйте, вместо =GET.CELL(66) использовать =GET.CELL(66;$A$1) ... это решит проблему переименования рабочей книги, прада только до тех пор, пока Вы не удалите рабочий лист, ссылка на который будет наличествовать в именованной формуле.
Цитата:
Originally posted by pashulka
Возможно в Вашем случае, гораздо проще остановить свой выбор на первом варианте, с использованием стандартной функции рабочего листа =ЯЧЕЙКА()/CELL()
Возможно в Вашем случае, гораздо проще остановить свой выбор на первом варианте, с использованием стандартной функции рабочего листа =ЯЧЕЙКА()/CELL()
наверное так,
файлы бывают достаточно большие, надежность в этом случае играет важную роль...
странно, но =GET.CELL(66;$A$1) перестает динамически работать, если переименовать лист, не помогает ни ввод нового имени, ни обновление (изменение) адреса
P.S. Только для обладателей руссифицированной версии MS Excel вместо =GET.CELL() нужно использовать =ПОЛУЧИТЬ.ЯЧЕЙКУ()