Я попробовал подход @ ScottK, сначала как боковую функцию моего функционального UDF, а затем как автономную версию суффикса HELP, когда я столкнулся с проблемой (см. Ниже). Оглядываясь назад, последний подход лучше в любом случае - более очевидный для пользователя, достаточно внимательный, чтобы увидеть подсказку инструмента, и он не загромождает функциональный код.
Я понял, что если невнимательный пользователь просто набрал имя функции и закрыл круглые скобки, пока он обдумал это, появится помощь, и он будет в пути. Но сбросить кучу текста в одну ячейку, которую я не могу форматировать, не представлялось хорошей идеей. Вместо этого, когда функция вводится в ячейку без аргументов, т.е.
= interpolateLinear()
or
= interpolateLinear_Help()
MsgBox открывается с текстом справки. MsgBox ограничивается ~ 1000 символами, может быть, 1024. Но этого достаточно (всего 8^/) для моей чрезмерно обманутой функции интерполяции. Если это не так, вы всегда можете открыть форму пользователя и отправиться в город.
При первом открытии окна сообщения это выглядело как успех. Но есть пара проблем. Сначала, конечно, пользователь должен знать, чтобы ввести функцию без аргументов (+1 для суффикса _Help UDF).
большое проблема в том, что msgBox повторно открывается несколько раз подряд, спонтанно, работая в несвязанных частях книги. Излишне говорить, что это очень раздражает. Иногда это продолжается до тех пор, пока я не получу циркулярное предупреждение. Идите фигуру. Если UDF может изменить формулу ячейки, я бы сделал это, чтобы закрыть ее.
Я не знаю, почему Excel считает необходимым пересчитать формулу снова и снова; ни автономная, ни полная версия (в режиме помощи) не имеют прецедентов или иждивенцев. Существует не application.volatile заявление где угодно. Конечно, функция возвращает значение вызывающей ячейке. Может быть, это вызывает повтор? Но это то, что делают UDF. Я не думаю, что вы можете не вернуть значение.
Поскольку вы не можете изменить рабочий лист формулы из UDF, я попытался вернуть определенную строку --a значения --to вызывающей ячейки (только один вы можете изменить значение от UDF), полагая, что я проверил бы значение ячейки, используя application.caller в следующем цикле, указать мою строку и не переустанавливать справочное сообщение. Казалось, что хорошая идея в то время - не работала. Возможно, я сделал что-то глупое в своем состоянии, лишенном сна. Мне все еще нравится идея. Я обновлю это, когда (если) я исправлю проблему. Мой быстро исправить, чтобы добавить строку в окне справки: "обратиться за помощью только в экстренных случаях удалить формулу обижая, чтобы положить конец страдания
В то же время, я попробовал подход Application.MacroOptions довольно легко... , и это выглядит профессионально. Одна проблема для разработки. Я отправлю отдельный ответ на этот подход позже.
Не подсказка ... но это что-то ... http://xcell05.free.fr/english/index.html HTH! – 2010-11-24 00:39:23
Спасибо b. Это выглядит немного страшно, но если это сработает, это решение. – 2010-12-01 21:16:53
Теперь это поддерживается для VBA и других типов надстроек (.NET, Python и т. Д.) С расширением IntelliSense Excel-DNA: https://excel-dna.net/2016/11/24/excel-udf-intellisense -for-excel-dna-and-vba/ – Govert 2016-11-28 13:03:46