Поиск подсказки для пользовательской функции 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 93

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;
}

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

Function Description

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

Argument Help

это выглядит хорошо, но все это по-прежнему очень шелушится, работает только на моей машине и иногда вылетает 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, которая показывает подсказки XLLs, пожалуйста, дайте мне знать.

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