Как поместить всплывающую подсказку в пользовательскую функцию

В Excel 2007, как добавить описание и подсказки параметров к пользовательской функции? Когда я начинаю вводить вызов функции для встроенной функции, Excel показывает описание и список параметров – всплывающую подсказку. Я бы хотел сделать то же самое для функций, которые я определяю.

Не только для мастера вставки формулы, но и в поле формулы, поэтому, если я "=myFun(" , на "(" всплывающая подсказка появляется так же, как и для "=average("

В справке VBA нет никакой помощи, нет ни на MSDN, ни на каких-либо специализированных форумах Excel и VBA, которые я могу найти, поэтому это явно длинный снимок.

Профессиональная разработка Excel Стивеном Булленом описывает, как регистрировать UDF, что позволяет описать описание в диалоговом окне «Аргументы функций»:

 Function IFERROR(ByRef ToEvaluate As Variant, ByRef Default As Variant) As Variant If IsError(ToEvaluate) Then IFERROR = Default Else IFERROR = ToEvaluate End If End Function Sub RegisterUDF() Dim s As String s = "Provides a shortcut replacement for the common worksheet construct" & vbLf _ & "IF(ISERROR(, , )" Application.MacroOptions macro:="IFERROR", Description:=s, Category:=9 End Sub Sub UnregisterUDF() Application.MacroOptions Macro:="IFERROR", Description:=Empty, Category:=Empty End Sub 

От: http://www.ozgrid.com/forum/showthread.php?t=78123&page=1

Чтобы отобразить диалог «Аргументы функций», введите имя функции и нажмите Ctrl A. В качестве альтернативы щелкните символ «fx» в строке формул:

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

Не решение для всплывающих подсказок, но адекватное обходное решение:

Начните вводить UDF =MyUDF( затем нажмите CTRL + Shift + A, и будут отображаться ваши параметры функции. Пока эти параметры имеют значащие имена, вы, по крайней мере, имеете жизнеспособную подсказку

Например, это:

=MyUDF( + CTRL + Shift + A

Включает:

=MyUDF(sPath, sFileName)

Я просто создаю «help» версию функции. Отображается справа под функцией в автозаполнении – пользователь может выбрать ее в соседней ячейке для получения инструкций.

 Public Function Foo(param1 as range, param2 as string) As String Foo = "Hello world" End Function Public Function Foo_Help() as String Foo_Help = "The Foo function was designed to return the Foo value for a specified range a cells given a specified constant." & CHR(10) & "Parameters:" & CHR(10) & " param1 as Range : Specifies the range of cells the Foo function should operate on." & CHR(10) &" param2 as String : Specifies the constant the function should use to calculate Foo" &" contact the Foo master at [email protected] for more information." END FUNCTION 

Каретка улучшает читаемость с помощью wordwrap. 2 птицы с одним камнем, теперь функция имеет некоторую документацию.

Я знаю, что вы приняли для этого ответ, но теперь есть решение, позволяющее получить окно завершения стиля intellisense, как и для других функций excel, с помощью добавления Excel-DNA или регистрации сервера intellisense внутри вашего добавьте его. См. здесь .

Теперь я предпочитаю способ C # делать это – это намного проще, как в Excel-DNA, любой class, который реализует IExcelAddin , подхватывается каркасом AutoOpen() и AutoClose() AutoOpen() и AutoClose() при открытии / закрытии добавления В этом вам просто нужно:

 namespace MyNameSpace { public class Intellisense : IExcelAddIn { public void AutoClose() { } public void AutoOpen() { IntelliSenseServer.Register(); } } } 

и затем (и это просто взято с страницы github), вам просто нужно использовать annotations ExcelDNA для своих функций:

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

которые аннотируются с помощью аннотаций ExcelDNA, сервер intellisense будет отображать имена и описания аргументов.

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

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

К сожалению, нет возможности добавлять всплывающие подсказки для аргументов UDF.
Чтобы продлить ответ Remou, вы можете найти более полный, но более сложный подход к описаниям для Мастера функций в
http://www.jkp-ads.com/Articles/RegisterUDF00.asp

Много танцует вокруг ответа. Вы можете добавить справочную информацию UDF, но вам нужно экспортировать модуль и отредактировать содержимое в текстовом редакторе, а затем повторно импортировать его в VBA. Вот пример из Chip Pearson: Добавление атрибутов кода

Метод @ будет лучшим. Просто добавьте несколько строк о деталях, чтобы люди не использовали ExcelDNA раньше, чем я.

Загрузите Excel-DNA IntelliSense из https://github.com/Excel-DNA/IntelliSense/releases

Есть две версии, одна для 64, проверьте версию Excel. Для моего случая я использую 64 версию.

Откройте Excel / Developer / Add-Ins / Browse и выберите ExcelDna.IntelliSense64.xll.

Вставьте новый лист, измените имя на « IntelliSense », добавьте описание функции, как https://github.com/Excel-DNA/IntelliSense/wiki/Getting-Started

Тогда наслаждайтесь! 🙂

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

Также вы можете использовать этот макрос для назначения описаний аргументам и UDF:

 Private Sub RegisterMyFunction() Application.MacroOptions _ Macro:="SampleFunction", _ '' Your UDF name Description:="calculates a result based on provided inputs", _ Category:="My UDF Category", _ '' Or use numbers, a list in the link below ArgumentDescriptions:=Array( _ '' One by each argument "is the first argument. tell the user what it does", _ "is the second argument. tell the user what it does") End Sub 

Кредиты для Кендалла и оригинальный пост здесь . Для категорий UDF

Я попробовал подход @ ScottK, сначала как боковую функцию моего функционального UDF, а затем как автономную версию суффикса HELP, когда я столкнулся с проблемой (см. Ниже). Оглядываясь назад, последний подход лучше в любом случае – более очевидный для пользователя, достаточно внимательный, чтобы увидеть подсказку инструмента, и он не загромождает функциональный код.

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

  = interpolateLinear() or = interpolateLinear_Help() 

msgBox открывается с помощью текста справки. MsgBox ограничивается ~ 1000 символами, может быть, 1024. Но этого достаточно (всего 8 ^ /) для моей чрезмерно обманутой функции интерполяции. Если это не так, вы всегда можете открыть форму пользователя и отправиться в город.

При первом открытии windows сообщения это выглядело как успех. Но есть пара проблем. Сначала, конечно, пользователь должен знать, чтобы ввести функцию без аргументов (+1 для суффикса _Help UDF).

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

Я не знаю, почему Excel считает необходимость пересчета формулы снова и снова; ни автономная, ни полная версия (в режиме помощи) не имеют прецедентов или иждивенцев. В любом месте нет приложения . Конечно, функция возвращает значение вызывающей ячейке. Может быть, это вызывает повтор? Но это то, что делают UDF. Я не думаю, что вы не можете вернуть значение.

Поскольку вы не можете изменить формулу рабочего листа из UDF, я попытался вернуть определенную строку – значение – в вызывающую ячейку (единственную, которую вы можете изменить значение из UDF), полагая, что я проверил бы значение ячейки с помощью application.caller в следующем цикле, указать мою строку и не переучитывать вспомогательное сообщение. Казалось, что хорошая идея в то время – не работала. Возможно, я сделал что-то глупое в своем состоянии, лишенном сна. Мне все еще нравится идея. Я обновлю это, когда (если) я исправлю проблему. Мое быстрое исправление заключалось в том, чтобы добавить строку в поле справки: « Обратиться за помощью только в экстренной ситуации. Удалите формулу, чтобы прекратить страдания.

Тем временем я пробовал подход Application.MacroOptions. Довольно легко, и он выглядит профессионально. Просто одна проблема для разработки. Позднее я отправлю отдельный ответ на этот подход.

  • Сохранение нескольких листов в .pdf
  • Лучший способ протестировать приложение MS Access?
  • Преобразование даты Excel из yyyymmdd в mm / dd / yyyy
  • Текст HTML с тегами для форматированного текста в ячейке Excel
  • Цикл через таблицы Excel
  • Как искать строку в массиве
  • VBA - переменная в диапазоне, внутри формулы
  • Как скопировать письмо Outlook Outlook в Excel с помощью VBA или макросов
  • Неинтерфейс SQL Injection
  • Показывать или скрывать строки в листе excel при значении конкретной ячейки (excel 2007 и Windows 7)
  • Как добавить подпись по умолчанию в Outlook
  • Interesting Posts

    Закройте вкладку двумя щелчками мыши в Google Chrome.

    Как настроить controller webapi для multipart / form-data

    Как выполнять задачу Async повторно после фиксированных интервалов времени

    Медленный компьютер на зарядном устройстве низкой мощности

    dplyr: Как использовать group_by внутри функции?

    Как отключить кнопку «назад» на моей мыши?

    Удаление папок дает доступ запрещенному сообщению об ошибке в Windows 7, хотя я являюсь администратором

    Невозможно найти один или несколько типов, необходимых для компиляции динамического выражения. Вам не хватает ссылки на файлы Microsoft.CSharp.dll и в System.Core.dll?

    Пользовательские шрифты и пользовательский текст на Android

    Java-библиотека USB

    Как уменьшить размер файла страницы?

    сервер rails не запускается с mysql2, используя rvm & ruby ​​1.9.2-p0 на OSX 10.6.5

    Что такое RuntimeBroker.exe в Windows 8?

    Нужны ли eot, ttf и svg в объявлении шрифта?

    Когда я должен создать деструктор?

    Давайте будем гением компьютера.