Квест на підказку щодо спеціальної функції Excel


100

Це питання було задано і раніше , але кожен раз, коли прийнята відповідь - це просто відставка надати описи функцій за допомогою Application.MacroOptions( VBA6 ) ( VBA7 ), але ця інформація насправді не з'являється як підказка, тому це не вирішує мою проблему.

Мета

Ми всі бажаємо - мати можливість визначати власні функції будь-якими способами (VBA, VSTO або надбудова COM) та надавати користувачеві перевагу спливаючого опису функції та її параметрів, як з'являється для кожної вбудованої функції Excel, як вбудованої, так і в рядку формул:

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

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

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

Проблема

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

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

Як бачите, це складна функція з багатьма параметрами. Якщо користувач не знає про цей діалог "аргументи функції" та як його вивести, а натомість знайомий лише зі стандартною підказкою Excel, він побачить лише ім'я формули та додаткову допомогу:

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

За допомогою яких у них немає шансів правильно надати необхідні параметри. (Без читання документації, що, звичайно, жоден користувач ніколи не робить.)

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

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

Але ми, звичайно, маємо ту саму проблему, що і вище, яка полягає в тому, що стандартні користувачі програми excel будуть використовуватись лише для першого типового зображення та, ймовірно, ніколи не дізнаються цю функцію.

До цього моменту повинно бути зрозуміло, чому цього недостатньо, і ми хочемо того, що має кожна вбудована функція - вбудована підказка інструментів, яка розповідає користувачеві, як користуватися функцією.

Дражня

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

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

Безумовно, якщо ця інформація якось закодована у цьому XLL-файлі та передана в Excel, є спосіб його копіювання за допомогою власних надбудов? Зараз я зараз хочу почати трохи навчатись декомпіляції та бачити, чи зможу я переробити інженер все, що відбувається в пакеті інструментів для аналізу.

Як ви можете допомогти

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


4
Неможливо створити або показати підказки для аргументів UDF у поточних версіях Excel, використовуючи будь-яку з доступних технологій. Джерело від MVP: answer.microsoft.com/en-us/office/forum/office_2007-customize/…
silkfire

.NET Reflector не зміг відкрити ANALYS32.xll, зробивши висновок, що це не .NET Assembly. Це мене дивує. Схоже, мені доведеться спробувати декомпілювати його на мову складання?
Ален

5
Звучить цікаво, але я в минулому (офіс 97) робив підказки, що використовує winapi. І таким чином ви можете це зробити. Якщо це цікаво, я можу розкопати інформацію та спробувати зробити з неї анверр.
Archlight

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. Див Getting Started сторінки на GitHub для отримання інструкцій.


На жаль, схоже, Excel 2013 або Windows 8 або обидва потрібні для підтримки UI Automation TextRange, яку використовує довідка аргументів. Я хотів би почути від усіх, хто має досвід роботи з автоматичним інтерфейсом Windows ...
Govert

Ви намагалися посилатися на більш старі збірки Excel перед складанням на старих машинах?
Даніель Мьоллер

1
Посилання на об'єктну модель Excel насправді не залучені до цього. Але, безумовно, є різні версії UI Automation, які можуть вплинути на речі ...
Govert

1
Це вулиці попереду нічого там, поки що, тому ви отримуєте мій голос за щедрість. Я маю намір побачити, чи зможу я внести свій внесок у це рішення найближчим часом, тому слідкуйте за моїм запитом на тягнення!
Ален

@Alain Гарна робота для Govert! & Ален Я хотів би бачити, як ти це освоюєш.
CodeCamper

1

Як щодо

  1. Захоплення тексту, що вводиться, на ключовій події натискання клітинки. подобається це
  2. Перевірте, чи збігається текст із спеціальними функціями.
  3. Якщо відповідає, то покажіть щось на зразок мітки чи форми, щоб зробити вигляд, що є підказкою. подобається це

Це прийнятно?

Це трохи некрасиво, але простіше.


Це цікавий вихідний пункт, який я вважав, але зіткнувся з ускладненнями, коли зустрічаються більш розвинені форми редагування формули (наприклад, натискання десь посередині та видалення / додавання символів, або виділення та перезапис частини формули, або використання спеціальна формула в середині якоїсь іншої формули.) Для цього потрібно більше, ніж перевірка натискань клавіш, нам потрібно буде дивитись на поточний вміст панелі формул або комірок у середині редагування. Це теж може бути досягнуто з деякими імпортованими бібліотеками dll та обробляти хакери. Безумовно, варто вивчити.
Ален

-1

Що таке 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.


3
На жаль, реєстрація UDF за допомогою xlfRegister не призводить до того, що Excel відображатиме цю інформацію як підказки для інтелігенції в аркушах. Описані там описи тощо відображаються лише у діалоговому вікні «Аргументи функцій», яке з'являється при натисканні кнопки fx. Але це не те, про що задається оригінальний плакат.
Govert

@Govert це все ще так у 2016 році?
beppe9000

@ beppe9000 Так. Ви можете отримати в-листі IntelliSense спливаючі підказки для користувача функцій (визначених у XLL або VBA) з використанням розширення Excel-ДНК IntelliSense: github.com/Excel-DNA/IntelliSense
Govert
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.