Поиск подсказки для пользовательской функции Excel
этот вопрос был попросилдо, но каждый раз принятый ответ-это просто отставка, чтобы предоставить описания функций с помощью Application.MacroOptions
(для vba6) (VBA7), но эта информация на самом деле не отображается в виде подсказки, поэтому она не решает мою проблему.
Цель
мы все хотим иметь возможность определять пользовательские функции любыми средствами (VBA, VSTO или COM-надстройка) и давать пользователь преимущество всплывающего окна / подсказки описание функции и ее параметров, как показано для каждой встроенной функции Excel, либо в строке формул:
Проблема
В настоящее время лучшее, что я видел, это определить функции (часто используя вызов вышеуказанных Макроопций), так что при вызове диалогового окна функции (кнопка fx в строке формул) их описания функций и параметров отображаются следующим образом:
Как вы можете видеть, это сложная функция со многими параметрами. Если пользователь не знает об этом диалоге" аргументы функции " и как его вызвать, а вместо этого знаком только со стандартной подсказкой Excel, они будут видеть только имя формулы и никаких дополнительных справка:
С которым у них нет шансов правильно предоставить требуемые параметры. (Не читая документацию, что, конечно, ни один пользователь никогда не делает.)
теперь, опытный пользователь может знать, что, набрав Ctrl+Shift+A, им будет предоставлен автоматически заполненный список параметров функции, таких как:
но, конечно, у нас есть та же проблема, что и выше, которая что стандартные пользователи excel будут использоваться только для поведения по умолчанию с первого изображения и, вероятно, никогда не узнают эту функцию.
к этому моменту должно быть ясно, почему этого недостаточно, и мы хотим, чтобы каждая встроенная функция имела встроенный инструмент, который сообщает пользователю, как использовать функцию.
Задира
во-первых, я мог бы быть убежден, что это просто невозможно, кроме как с родным Excel прикладная функция. Надстройки и VBA являются расширяемыми функциями, и этот инструмент может просто не быть расширяемым. Но эта теория оспаривается существованием надстройки Analysis Toolpak. Конечно, он встроен в Microsoft, но ANALYS32.xll-это автономная надстройка XLL, подобная тем, которые могут быть созданы в VB, C, C++ и C#. Конечно же, когда этот XLL загружается в приложение функции что он делает доступными имеют те же самые подсказки собственного excel функции:
конечно, если эта информация каким-то образом закодирована в этом файле XLL и передана в Excel, есть способ реплицировать ее с помощью наших собственных надстроек? Я сейчас нахожусь в том месте, где я собираюсь начать немного учить себя декомпиляции и посмотреть, могу ли я перепроектировать все, что происходит в пакете инструментов анализа.
Как Вы Можете Помочь
я почти уверен, что я исследовал все общедоступные информация есть об этой проблеме. Если кто-то знает что-то, чего я не знаю, что может помочь с этим, не стесняйтесь вмешиваться. Я очень незнаком с обратным инжинирингом скомпилированных DLL / xlls, так что если кто-то чувствует, как выскакивают открыть свою локальную копию Analysis32.xll и выяснить, что происходит с его определениями пользовательских функций, я был бы очень обязан. В противном случае, я просто продолжу копаться в этом сам, пока не доберусь до всех тупиков и не сообщу, что я нашел.
3 ответа:
Я разместил проект proof-of-concept в GitHub как Excel-DNA IntelliSense проект, реализующий это.
используя классы автоматизации пользовательского интерфейса для мониторинга соответствующих событий пользовательского интерфейса Excel, при необходимости отображается форма.
код завернут как Excel-ДНК надстройка и работает на моей машине 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; }
мы получаем как описание функции
и при выборе функции мы получаем аргумент help
это выглядит хорошо, но все это по-прежнему очень шелушится, работает только на моей машине и иногда вылетает Excel. Хотя, возможно, это только начало...
Обновление 9 Мая 2014:
Я сделал некоторый прогресс, выясняя, как заставить аргумент помочь работать под более старыми версиями Excel и Windows. Однако для того, чтобы все было надежно, все еще требуется довольно много работы. Любой, кто хотел бы помочь с этим, пожалуйста, свяжитесь со мной напрямую.
Обновление 18 Июня 2016:
поддержка Excel UDF IntelliSense для надстроек Excel-DNA и функций VBA в настоящее время тестируется. Смотрите Начало Работы страница на GitHub для инструкции.
что такое XLL?
XLL-это DLL, которая экспортирует несколько процедур, вызываемых Excel или Диспетчер надстроек Excel. http://msdn.microsoft.com/en-us/library/office/bb687861.aspx
Как вы разрабатываете XLL?
Excel XLL SDK с Visual C++ (или все, что может скомпилировать DLL и вызвать процедуры SDK)
где я могу найти краткое руководство по созданию простой В Xll?
Как я получаю подсказки?
- реализуйте свою функцию как процедуру и экспортируйте ее
- реализовать и экспортировать процедуру xlAutoOpen (void) -http://msdn.microsoft.com/en-us/library/office/bb687860.aspx
- xlAutoOpen просто нужно позвонить xlfRegister - http://msdn.microsoft.com/en-us/library/office/bb687900.aspx
- для подсказок, особое внимание для:
pxArgumentText, pxFunctionHelp, pxArgumentHelp1
к сожалению, надстройка Analysis Toolpak также не имеет подсказок.
мое решение было неправильным, но с неправильной информацией, опубликованной оригинальным плакатом. Показывая картинку с BINOMDIST, если его ссылке ясно показывает, что это не функция ANALYS32.XLL-модуль.
Это означает, что я был пытаясь решить вопрос невозможно. Потому что нет XLL, который может сделать то, что просил плакат. Если вы нашли версию Excel, которая показывает подсказки XLLs, пожалуйста, дайте мне знать.
о чем спрашивал плакат, пытаясь имитировать поведение XLL, я уверен, что мой ответ был самым правильным в отношении того, что ANALYS32.я так и сделаю.