Я спробував підхід @ ScottK, спочатку як побічну функцію мого функціонального UDF, потім як окрему версію суфікса _Help, коли я зіткнувся з проблемою (див. Нижче). З огляду на минуле, останній підхід у будь-якому випадку кращий - більш очевидний для користувача, досить уважного, щоб побачити підказку інструменту, і він не захаращує функціональний код.
Я припустив, що якщо неуважний користувач просто введе ім’я функції та закриє дужки, поки він все обдумає, з’явиться довідка, і він буде в дорозі. Але скидати купу тексту в одну клітинку, яку я не можу відформатувати, не здавалося хорошою ідеєю. Натомість, коли функція вводиться в клітинку без аргументів, тобто
= interpolateLinear()
or
= interpolateLinear_Help()
msgBox відкривається з текстом довідки. MsgBox обмежений ~ 1000 символами, можливо, це 1024. Але цього достатньо (ледь 8 ^ /) для моєї надто обдуреної функції інтерполяції. Якщо це не так, ви завжди можете відкрити форму користувача та поїхати до міста.
Коли вперше відкрилося вікно повідомлення, це виглядало як успіх. Але є пара проблем. По-перше, користувач повинен знати, щоб ввести функцію без аргументів (+1 для суфікса _Help UDF).
Велика проблема, тим MsgBox знову відкриває кілька разів поспіль, спонтанно під час роботи в незв'язаних частинах книги. Що й казати, це дуже дратує. Іноді це триває, поки я не отримаю кругове попередження про посилання. Піди розберися. Якби UDF міг змінити формулу комірки, я б зробив це, щоб замовкнути її.
Я не знаю, чому Excel відчуває потребу в перерахунку формули знову і знову; ні автономна _Help, ні повна версія (у режимі довідки) не мають прецедентів або залежних. Ніде немає заявки application.volatile . Звичайно, функція повертає значення у клітинку, що викликає. Можливо, це викликає повторення? Але це те, що роблять СДС. Я не думаю, що ви не можете повернути значення.
Оскільки ви не можете змінити формулу робочого аркуша з UDF, я спробував повернути певний рядок - значення - у викличну комірку (єдину, яку ви можете змінити значення з UDF), вважаючи, що я б перевірив значення комірки за допомогою application.caller у наступному циклі, визначте мій рядок і знайте, що не потрібно повторно відображати довідкове повідомлення. На той час це здавалося гарною ідеєю - не спрацювало. Можливо, я зробив щось дурне у своєму недосипаному стані. Мені ідея досі подобається. Я оновлю це, коли (якщо) вирішу проблему. Моїм швидким виправленням було додати рядок у вікні довідки: " Шукати допомогу лише в екстреному випадку. Видаліть формулу, що порушує, щоб покласти край нещастю.
Тим часом я спробував підхід Application.MacroOptions. Досить просто, і це виглядає професійно. Тільки одна проблема, яку потрібно вирішити. Пізніше я опублікую окрему відповідь на цей підхід.