Как поместить подсказку на пользовательскую функцию
как добавить описание и подсказки параметров в пользовательскую функцию в Excel 2007? Когда я начинаю вводить вызов функции для встроенной функции, Excel показывает описание и список параметров--подсказку. Я хотел бы сделать то же самое для функций, которые я определяю.
не только для мастера вставки формулы, но и в поле формулы, поэтому, если я нажму"=myFun(" на "(" всплывающая подсказка появляется так же, как и для "=average("
в справке VBA нет помощи, нет на MSDN и ни на одном из выделенных форумов Excel и VBA я не могу найти, так что это явно длинный выстрел.
9 ответов:
профессиональное развитие в Excel Стивен Буллен описывает, как Регистрация функции, которая позволяет описание для отображения в функции Диалог аргументов:
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(<expression>, <default>, <expression>)" 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
чтобы открыть диалоговое окно аргументы функции, введите имя функции и нажмите CtrlA. Кроме того, нажмите на символ " fx " в Формуле бар:
не подсказка решение, но адекватный обходной путь:
начните вводить UDF
=MyUDF(нажмите клавишу CTRL + Shift + A и ваши параметры функции будут показаны. Пока эти параметры имеют значимые имена, у вас, по крайней мере, есть жизнеспособное приглашениенапример, так:
=MyUDF(+ CTRL + Shift + Aпревращается в это:
=MyUDF(sPath, sFileName)
Я знаю, что вы приняли ответ на это, но теперь есть решение, которое позволяет вам получить окно завершения стиля intellisense, как и для других функций excel, с помощью добавления Excel-DNA или путем регистрации сервера intellisense внутри вашего собственного добавления. посмотреть здесь.
теперь я предпочитаю C# способ сделать это-это гораздо проще, как внутри Excel-ДНК, любой класс, который реализует
IExcelAddinподхватывается фреймворком addin и имеетAutoOpen()иAutoClose()run при открытии / закрытии надстройки. Так что вам просто нужно это:namespace MyNameSpace { public class Intellisense : IExcelAddIn { public void AutoClose() { } public void AutoOpen() { IntelliSenseServer.Register(); } } }и затем (и это только что взято со страницы github), вам просто нужно использовать аннотации 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, поэтому я не использую эти части.
Я просто создаю "справочную" версию функции. Отображается прямо под функцией автозаполнения-пользователь может выбрать ее вместо этого в соседней ячейке для инструкций.
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 on. 2 птиц с одним камнем, теперь функция имеет некоторую документацию.
к сожалению, нет способа добавить подсказки для Аргументов UDF.
Чтобы расширить ответ Remou, вы можете найти более полный, но более сложный подход к описаниям для мастера функций по адресу
http://www.jkp-ads.com/Articles/RegisterUDF00.asp
много танцев вокруг ответа. Вы можете добавить контекстную справку UDF, но вам нужно экспортировать модуль и отредактировать содержимое в текстовом редакторе, а затем повторно импортировать его в VBA. Вот пример из чипа Пирсона:Добавление Атрибутов Код
@метод Уилла является лучшим. Просто добавьте несколько строк о деталях для людей, которые не использовали ExcelDNA раньше, как я.
Скачать Excel-DNA IntelliSense из https://github.com/Excel-DNA/IntelliSense/releases
есть две версии, одна для 64, проверьте версию Excel. Для моего случая, я использую 64 версии.
откройте Excel / Developer/Add-Ins / обзор и выберите 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^/) для моей чрезмерно обманутой функции интерполяции. Если это не так, вы всегда можете открыть форму и идем в город.
в первый раз, когда окно сообщения открылось, оно выглядело как успех. Но есть пара проблем. Прежде всего, пользователь должен знать, чтобы ввести функцию без аргументов (+1 для суффикса _HELP UDF).
на большой проблема в том, что msgBox открывается несколько раз подряд, спонтанно при работе в несвязанных частях книги. Излишне говорить, что это очень раздражает. Иногда это продолжается, пока я не получаю циклическое предупреждение ссылки. Иди разберись. Если пользовательская функция может изменить ячейку формулу, я сделал бы это, чтобы заткнуться.
Я не знаю, почему Excel чувствует необходимость пересчитывать формулу снова и снова; ни _help standalone, ни полная версия (в режиме справки) не имеют прецедентов или иждивенцев. Там нет приложение.летучие заявление в любом месте. Конечно, функция возвращает значение в вызывающую клетку. Может быть, это запускает recalc? Но это то, что делают UDFs. Я не думаю, что вы можете не возвратить значение.
Так как вы не можете изменить рабочий лист формула из UDF я попытался вернуть определенную строку --a стоимостью --к вызывающей ячейке (единственной, которую вы можете изменить значение из UDF), полагая, что я проверю значение ячейки с помощью приложение.звонящий на следующем цикле, определить мою строку, и не знаю, чтобы повторно отобразить сообщение справки. В то время это казалось хорошей идеей-не сработало. Может быть, я сделал что-то глупое в мой состояние недосыпания. Мне все еще нравится эта идея. Я обновлю это, когда (если) я исправлю проблему. Мое быстрое решение состояло в том, чтобы добавить строку в поле справки:"обращаться за помощью только в экстренных случаях. Удалите оскорбительную формулу, чтобы положить конец страданиям.
тем временем, я попробовал приложение.Макрооптический подход. Довольно легко, и это выглядит профессионально. Осталось решить только одну проблему. Я опубликую отдельный ответ на этот подход позже.




Comments