2010-11-24 4 views
57

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

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

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

+0

Не подсказка ... но это что-то ... http://xcell05.free.fr/english/index.html HTH! – 2010-11-24 00:39:23

+0

Спасибо b. Это выглядит немного страшно, но если это сработает, это решение. – 2010-12-01 21:16:53

+0

Теперь это поддерживается для VBA и других типов надстроек (.NET, Python и т. Д.) С расширением IntelliSense Excel-DNA: https://excel-dna.net/2016/11/24/excel-udf-intellisense -for-excel-dna-and-vba/ – Govert 2016-11-28 13:03:46

ответ

44

профессионального развития 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(<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» в строке формул:

enter image description here

+0

Новые аргументы в методе позволяют описывать параметры функции. – Wilhelm 2011-11-07 21:04:01

+0

Я все еще не понимаю, можете ли вы сделать это проще, пожалуйста? Является ли IFERROR исходной функцией, где вы показываете описание, или это вспомогательная функция, необходимая для регистрации UDF ?! – Black 2016-11-10 09:32:58

2

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

69

не решение подсказки, но адекватный обходной путь:

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

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

=MyUDF( + CTRL + Сдвиг +

Превращается в это:

=MyUDF(sPath, sFileName)

7

I просто создайте «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 on. 2 птицы с одним камнем, теперь функция имеет некоторую документацию.

0

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

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

= interpolateLinear() 
or 
    = interpolateLinear_Help() 

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

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

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

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

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

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

1

Много танцующих вокруг ответа. Вы можете добавить контекстную справку UDF, но вам нужно экспортировать модуль и отредактируйте содержимое в текстовом редакторе, а затем повторно импортируйте его в VBA. Вот пример из Chip Pearson: Adding Code Attributes

6

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

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

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

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

enter image description here enter image description here

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

1

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

Скачать Excel-ДНК IntelliSense из https://github.com/Excel-DNA/IntelliSense/releases

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

Открыть Excel/Разработчик/Надстройки/Просмотреть и выбрать ExcelDna.IntelliSense64.xll.

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

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

enter image description here

0

Также вы можете использовать этот макрос для назначения описаний к аргументам и 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 

Кредиты Kendall и исходное сообщение here. Для UDF Categories

Смежные вопросы