Я попробовал подход @ ScottK, сначала в качестве дополнительной функции моего функционального UDF, а затем в качестве отдельной суффиксной версии _Help, когда столкнулся с проблемой (см. Ниже).Оглядываясь назад, последний подход в любом случае лучше - более очевиден для пользователя, достаточно внимательного, чтобы увидеть подсказку, и он не загромождает функциональный код.
Я подумал, что невнимательный пользователь просто набралимя функции и закрыл скобки, пока он думал, помощь появится, и он будет в пути.Но выгрузить кучу текста в одну ячейку, которую я не могу отформатировать, не очень хорошая идея.Вместо этого, когда функция вводится в ячейку без аргументов, например,
= interpolateLinear()
or
= interpolateLinear_Help()
, открывается msgBox с текстом справки.Поле msgBox ограничено ~ 1000 символов, может быть, это 1024. Но этого достаточно (едва 8 ^ /) для моей чрезмерно обманутой функции интерполяции.Если это не так, вы всегда можете открыть форму пользователя и перейти в город.
При первом открытии окна сообщения это выглядело как успех.Но есть пара проблем.Прежде всего, пользователь должен знать, чтобы войти в функцию без аргументов (+1 для суффикса _Help UDF).
Проблема big в том, что msgBox открывается несколько раз подряд, самопроизвольно при работе в несвязанных частях рабочей книги.Излишне говорить, что это очень раздражает.Иногда это продолжается до тех пор, пока я не получу предупреждение о круговой ссылке.Пойди разберись.Если бы UDF мог изменить формулу ячейки, я бы сделал это, чтобы закрыть ее.
Я не знаю, почему Excel чувствует необходимость пересчитывать формулу снова и снова;ни автономная _Help, ни полная версия (в режиме справки) не имеют прецедентов или иждивенцев.Нигде нет оператора application.volatile .Конечно, функция возвращает значение в вызывающую ячейку.Может быть, это вызывает повторный вызов?Но это то, что делают UDF.Я не думаю, что вы можете не вернуть значение.
Так как вы не можете изменить форму формулы из UDF, я попытался вернуть определенную строку--a value - в вызывающую ячейку (единственную, в которой вы можете изменить значение из UDF), полагая, что я проверю значение ячейки, используя application.caller наВ следующем цикле найдите мою строку и не пытайтесь повторно отображать справочное сообщение.В то время это казалось хорошей идеей - не сработало.Может быть, я сделал что-то глупое в своем лишенном сна состоянии.Мне все еще нравится идея.Я обновлю это, когда (если) я решу проблему.Мое быстрое решение состояло в том, чтобы добавить строку в поле справки: « Обратиться за помощью только в чрезвычайной ситуации. Удалите оскорбительную формулу, чтобы положить конец страданиям.
Тем временем я попробовал приложениеПодход .MacroOptions. Довольно простой, и выглядит профессионально. Только одна проблема, которую нужно решить. Позже я опубликую отдельный ответ по этому подходу.