Поиск подсказки пользовательской функции Excel

Этот вопрос задавали раньше , но каждый раз, когда принятый ответ – это просто отставка для описания функций с использованием Application.MacroOptions ( VBA6 ) ( VBA7 ), но эта информация фактически не отображается как всплывающая подсказка, поэтому она не решает мою проблему ,

objective

Все, что мы все хотим, – это определить пользовательские функции любыми способами (VBA, VSTO или COM-надстройку) и дать пользователю преимущество всплывающего / подсказки описания функции и ее параметров, так как появляется для каждой встроенной функции Excel, как встроенной, так и в строке формул:

введите описание изображения здесь

введите описание изображения здесь

Широко распространенный ответ на эту потребность состоит в том, что пользовательские функции невозможно, но я хочу оспаривать эту веру.

Проблема

В настоящее время лучшее, что я видел, это определить функции (часто используя вышеупомянутый вызов MacroOptions), чтобы при открытии диалогового windows функции (кнопка fx в строке формулы) их функции и описания параметров выглядели следующим образом:

введите описание изображения здесь

Как вы можете видеть, это сложная функция со многими параметрами. Если пользователь не знает об этом диалоге «аргументы функции» и как его поднять, и вместо этого он знаком только с стандартной подсказкой Excel, они будут видеть только имя формулы и никакой дополнительной помощи:

введите описание изображения здесь

С ними у них нет шансов правильно предоставить требуемые параметры. (Без чтения документации, которую, конечно же, никто не делает).

Теперь опытный пользователь может знать, что, набрав Ctrl + Shift + A , им будет предоставлен автоматически заполненный список параметров функции, например:

введите описание изображения здесь

Но, конечно, мы имеем ту же проблему, что и выше, что означает, что стандартные пользователи excel будут использоваться только для поведения по умолчанию с первого изображения и, вероятно, никогда не узнают эту функцию.

По этой причине должно быть ясно, почему этого недостаточно, и мы хотим, чтобы каждая встроенная функция имела встроенный инструмент, который подсказывает пользователю, как использовать эту функцию.

Дразнить

Сначала я мог убедиться, что это просто невозможно, кроме как с помощью собственных приложений приложений Excel. Надстройки и VBA – это функции расширяемости, и этот инструмент может просто не расширяться. Но эта теория оспаривается наличием надстройки Analysis Toolpak. Конечно, он встроен в Microsoft, но ANALYS32.xll является автономной надстройкой XLL, как и те, которые могут быть созданы на VB, C, C ++ и C #. Разумеется, когда этот XLL загружается в приложение, функции, которые он предоставляет, имеют одни и те же подсказки для собственных функций excel:

введите описание изображения здесь

Разумеется, если эта информация каким-то образом закодирована в этом XLL-файле и передана в Excel, есть способ ее репликации с помощью собственных надстроек? Сейчас я нахожусь в том месте, где я собираюсь начать немного учиться об декомпиляции и посмотреть, могу ли я перепроектировать все, что происходит в инструментальной патче анализа.

Как ты можешь помочь

Я почти уверен, что я исследовал всю общедоступную информацию о этой проблеме. Если кто-то знает что-то, я не знаю, что может помочь в этом, но не стесняйтесь звонить. Я очень незнакомый с компиляцией dlls / xlls, созданной с помощью обратной инженерии, поэтому, если кому-то хочется открыть свою локальную копию Analysis32.xll и выясняя, что происходит с его специальными определениями функций, я был бы очень обязан. В противном случае я просто буду копаться в этом сам, пока не удалю все тупики и не отчитаюсь о том, что я нахожу.

Я опубликовал проект доказательной концепции для GitHub в качестве проекта Excel-DNA IntelliSense , реализующего это.

Используя classы автоматизации пользовательского интерфейса для отслеживания соответствующих событий пользовательского интерфейса Excel, форма отображается, когда это необходимо.

Код завершается как надстройка Excel-DNA и работает на моей машине Excel 2013 / Windows 8. Я тестировал еще одну конфигурацию (64-разрядный Excel 2010 на Windows Server 2008) и имел серьезные проблемы.

Для функции C #, определенной с атрибутами Excel-DNA, как это:

 [ExcelFunction(Description = "A useful test function that adds two numbers, and returns the sum.")] public static double AddThem( [ExcelArgument(Name = "Augend", Description = "is the first number, to which will be added")] double v1, [ExcelArgument(Name = "Addend", Description = "is the second number that will be added")] double v2) { return v1 + v2; } 

мы получаем как описание функции

Описание функции

и при выборе функции мы получаем аргумент помощи

Справка по аргументу

Это выглядит хорошо, но все это очень шелушатся, работает только на моей машине и иногда сбой Excel. Это может быть началом, хотя …


Обновление 9 мая 2014 года:

Я немного поразмыслил над тем, как заставить аргумент работать в старых версиях Excel и Windows. Однако для того, чтобы все было надежно, все еще требуется довольно много работы. Любой, кто хотел бы помочь с этим, должен связаться со мной напрямую.


Обновление 18 июня 2016 года:

Поддержка Excel UDF IntelliSense для надстроек Excel-DNA и функций VBA теперь тестируется. Инструкции см. На странице « Начало работы» в GitHub.

Как насчет

  1. Захват ввода текста при нажатии клавиши клавиши. как это
  2. Проверьте, соответствует ли текст пользовательским функциям.
  3. Если совпадения, то показывать что-то вроде метки или формы, чтобы притворяться всплывающей подсказкой. как это

Это приемлемо?

Это немного уродливо, но проще.

Что такое XLL?

XLL – это DLL, которая экспортирует несколько процедур, которые вызывают Excel или диспетчер надстроек Excel. http://msdn.microsoft.com/en-us/library/office/bb687861.aspx

Как вы разрабатываете XLL?

Excel XLL SDK с Visual C ++ (или что-нибудь, что может скомпилировать DLL и вызвать процедуры SDK)

Где я могу найти краткое руководство по созданию простого XLL?

http://support.microsoft.com/kb/178474

Как получить подсказки?

  1. Внедрите свою функцию в качестве процедуры и экспортируйте ее
  2. Процедура внедрения и экспорта xlAutoOpen (void) – http://msdn.microsoft.com/en-us/library/office/bb687860.aspx
  3. xlAutoOpen просто нужно вызвать xlfRegister – http://msdn.microsoft.com/en-us/library/office/bb687900.aspx
  4. Для всплывающих подсказок особое внимание уделяется: pxArgumentText, pxFunctionHelp, pxArgumentHelp1

К сожалению, надстройка Analysis Toolpak также не имеет всплывающих подсказок.

Мое решение было неправильным, но с неправильной информацией, отправленной оригинальным плакатом. Показывая изображение с BINOMDIST, если его ссылка ясно показывает, что это не функция ANALYS32.xll.

Это означает, что я пытался решить нерешенный вопрос. Потому что нет XLL, который может делать то, что запрашивал плакат. Если вы найдете версию Excel, в которой отображаются подсказки XLL, пожалуйста, дайте мне знать.

О том, что спросил плакат, пытаясь имитировать поведение XLL, я уверен, что мой ответ был самым правильным в отношении того, что делает ANALYS32.xll.

Давайте будем гением компьютера.