Поиск всплывающей подсказки для настраиваемых функций Excel

101

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

Цель

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

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

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

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

Эта проблема

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

Ален
источник
4
Невозможно создавать или показывать всплывающие подсказки для аргументов UDF в текущих версиях Excel с использованием любой из доступных технологий. Источник от MVP: answers.microsoft.com/en-us/office/forum/office_2007-customize/…
silkfire
.NET Reflector не смог открыть ANALYS32.xll, сделав вывод, что это не сборка .NET. Это меня удивляет. Похоже, мне придется попробовать декомпилировать его на ассемблер?
Alain
5
Звучит интересно, но в прошлом (офис 97) я делал всплывающие подсказки, используя winapi. И таким образом вы можете это сделать. Если это интересно, я могу выкопать информацию и попытаться сделать из нее ответ.
Archlight 04
1
Я тоже достану это тебе, это займет некоторое время, чтобы раскопать это. Но он должен подняться сюда, чтобы другие могли его использовать. Его низкое и злое сочетание winapi / vba /, и я думаю, что сделал его как vb.dll, но нет проблем, поднять его до .net
Archlight
1
По-видимому, команда разработчиков Excel принимает голоса за эту функцию здесь: excel.uservoice.com/forums/…
Ален

Ответы:

40

Я разместил экспериментальный проект на GitHub как проект Excel-DNA IntelliSense , реализующий его.

При использовании классов автоматизации пользовательского интерфейса для отслеживания соответствующих событий пользовательского интерфейса 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.

Говерт
источник
К сожалению, похоже, что для поддержки TextRange автоматизации пользовательского интерфейса, которую использует справка по аргументам, требуется Excel 2013 или Windows 8 или и то, и другое. Я хотел бы услышать мнение любого, у кого есть опыт работы с Windows UI Automation ...
Говерт,
Вы пробовали ссылаться на старые сборки Excel перед компиляцией на старые машины?
Daniel Möller
1
Ссылки на объектную модель Excel здесь не участвуют. Но, безусловно, существуют разные версии автоматизации пользовательского интерфейса, которые могут повлиять на ситуацию ...
Говерт
1
Пока что это улицы впереди всего, так что вы получаете мой голос за награду. Я собираюсь посмотреть, смогу ли я внести свой вклад в это решение в ближайшем будущем, так что следите за моим запросом на перенос!
Alain
@Alain Молодец, Говерт! & Ален, я бы хотел увидеть, как ты справишься с этим.
CodeCamper
1

Как насчет

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

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

Это немного некрасиво, но проще.

Clxy
источник
Это интересная отправная точка, которую я рассмотрел, но столкнулся с осложнениями, когда встречаются более сложные формы редактирования формулы (например, щелчок где-то посередине и удаление / добавление символов, или выделение и перезапись части формулы, или использование настраиваемая формула в середине какой-либо другой формулы.) Для этого требуется больше, чем проверка нажатий клавиш, нам нужно будет смотреть на текущее содержимое строки формул или ячейки в середине редактирования. Это тоже можно сделать с помощью некоторых импортированных библиотек dll и справиться с взломом. Конечно, стоит изучить.
Alain
-1

Что такое XLL?

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

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

Пакет SDK Excel XLL с 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 также не имеет всплывающих подсказок.

Мое решение было неправильным, но исходный постер опубликовал неверную информацию. Отображение изображения с БИНОМРАСП, если его ссылка ясно показывает, что это не функция ANALYS32.xll.

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

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

Маркос Зольновски
источник
3
К сожалению, регистрация UDF с помощью xlfRegister не заставляет Excel отображать эту информацию в виде всплывающих подсказок intellisense на листе. Зарегистрированные там описания и т. Д. Отображаются только в диалоговом окне «Аргументы функций», которое появляется при нажатии кнопки fx. Но это не то, о чем спрашивает оригинальный плакат.
Govert
@Govert, в 2016 году все еще так?
beppe9000
@ beppe9000 Да. Вы можете получить всплывающие подсказки IntelliSense на листе для UDF (определенных в XLL или VBA) с помощью расширения Excel-DNA IntelliSense: github.com/Excel-DNA/IntelliSense
Govert