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

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

Цель

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

enter image description here

enter image description here

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

Эта проблема

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

enter image description here

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

enter image description here

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

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

enter image description here

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

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

Дразнить

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

enter image description here

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

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

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

Ответ 1

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

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

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

Для функции С#, определенной с атрибутами 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

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

Argument Help

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


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

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


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

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

Ответ 2

Как насчет

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

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

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

Ответ 3

Что такое XLL?

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

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

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

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

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

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

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

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

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

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