|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу. Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста". Название темы слишком короткое или не отражает сути вашего вопроса. Тема исчерпала себя, помните, один вопрос - одна тема Прочитайте правила и заново правильно создайте тему. |
|
Опции темы | Поиск в этой теме |
08.05.2008, 21:13 | #1 |
Регистрация: 08.05.2008
Сообщений: 4
|
Из какой ячейки вызвана функция?
Вопрос опытным товарищам.
Мне требуется разработать пользовательскую функцию, вызываемую непосредственно из ячейки рабочего листа Excel. Может ли VBA код функции «узнать», из какой ячейки вызвана функция? ActiveCell не годится. Активной в момент вычисления функции вполне может быть совершенно иная ячейка. Function AAA(ByVal X as Double) As Double End Function Как получить ссылку на ячейку? Буду очень признателен за пример решения. ALink |
09.05.2008, 08:22 | #2 |
Форумчанин
Регистрация: 06.03.2008
Сообщений: 352
|
Далеко ходить не надо
VBE: набрать Caller и сразу нажать F1.
А можно и не сразу, но тогда придётся на Caller курсор поставить. |
09.05.2008, 12:20 | #3 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
Думаю ActiveCell подойдет.
Извините, не внимательно прочитал задачу...а убить ответ не могу(((
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
Последний раз редактировалось IgorGO; 09.05.2008 в 12:24. |
12.05.2008, 00:40 | #4 | |
Регистрация: 08.05.2008
Сообщений: 4
|
Цитата:
На листе может быть несколько ячеек с нашей функцией ААА. В процессе пересчета листа эти ячейки по очереди вызывают наш код. Активной же при этом является какая-то одна вполне конкретная (и, вообще говоря, произвольная) ячейка листа. Именно на нее возвращает ссылку ActiveCell. Но эта ячейка в нашей задаче бесполезна. И возникает вопрос: А может ли вообще функция в момент вычисления получить информацию, из какой именно ячейки ее вызвали, или Excel API это скрывает? Каких-то более или менее очевидных подходов не вижу Увы... ALink |
|
12.05.2008, 07:16 | #5 |
Форумчанин
Регистрация: 06.03.2008
Сообщений: 352
|
Имеющий глаза - не видит?
|
12.05.2008, 22:10 | #6 | |
Регистрация: 08.05.2008
Сообщений: 4
|
Цитата:
Я, конечно же, прочитал ваш пост #2. Однако смысл его остался мне совершенно неясен, потому и остался он без комментариев. Речь ведь идет, фактически, об условном форматировании ячейки с результатом работы пользовательской функции, форматировании, которое управляется самой этой функцией. Чтобы такая затея сработала, функция должна каким-то образом выяснить адрес ячейки, из которой ее на этот раз вызвали. Предполагается, что на рабочем листе имеется несколько десятков ячеек с одной и той же функцией. И каждая должна быть отформатирована независимо от других. Программно. Внутренняя логика принятия решения о характере форматирования сложна и не укладывается в штатные средства пользователя. Вы можете пояснить вашу идею про VBE, Caller и клавишу F1 в контексте обсуждаемой задачи? А едкими репликами прошу не беспокоить. Лишнее это. ALink |
|
12.05.2008, 22:57 | #7 | ||
Форумчанин
Регистрация: 06.03.2008
Сообщений: 352
|
И как же я теперь жить буду, непрокомментированный?!.
(Цитируется с незначительными сокращениями.)
Цитата:
Цитата:
VBE (Visual Basic Editor) - это то, при помощи чего Вам предстоит писать и отлаживать Вашу функцию и что вызывается к жизни командой Excel "Сервис -- Макрос >> Редактор Visual Basic". VBE снабжён контекстно-чувствительной справкой. В частности, это даёт возможность в любом месте любого модуля набрать некоторое ключевое слово (или поместить курсор на уже написанное) и, нажав клавишу F1, получить для него справку (если, конечно, это слово известно справочной системе первого уровня). Caller - то слово, которое, по моему скромному мнению, является ключом к решению заявленной Вами проблемы ("как определить ячейку, из которой вызвана функция"). Итак, войти в VBE, набрать в каком-нибудь модуле (можно создать новый) слово Caller и нажать F1. Если при изучении справки (и тех ссылок и примеров, которые к справке частенько прилагаются) возникнут вопросы - очень может быть, что и в них Вам здесь помогут разобраться. Вы вольны не читать моих постов. P.S. "Вы принимаете себя слишком всерьёз." ("Искусство быть человеком", Правило пятое.) |
||
13.05.2008, 00:59 | #8 | |
Регистрация: 08.05.2008
Сообщений: 4
|
Цитата:
Достаточно обратиться к свойству Caller объекта Application. В обсуждаемой выше ситуации результатом выполнения кода Dim R As Variant R = Application.Caller.Address будет адрес ячейки, из которой осуществлен вызов кода. «дмидми», спасибо за наводку. Тема закрыта. ALink |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
функция | Janette | Помощь студентам | 1 | 29.04.2008 20:10 |
Как разделить число и текст в одной ячейки на две ячейки. | neboskreb | Microsoft Office Excel | 2 | 15.04.2008 19:39 |
как присвоить значение ячейки R1C1 из 1.xls, допустим какой-нибудь любой ячейке из 2.xls ? | diabloskrk | Microsoft Office Excel | 3 | 08.10.2007 12:27 |
одна функция потока, а другая функция - член класса запускающего этот поток | Дмитрий_Ч | Общие вопросы C/C++ | 2 | 27.09.2007 08:50 |
чем может быть вызвана эта ошибка | doncova1 | Общие вопросы Delphi | 5 | 01.03.2007 11:15 |