Как поместить подсказку в пользовательскую функцию
в 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
From: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-ДНК или путем регистрации сервера intellisense внутри вашего собственного добавления. посмотреть здесь.
теперь я предпочитаю способ C# - это намного проще, так как внутри Excel-DNA любой класс, который реализует IExcelAddin
подхватывается платформой addin и имеет AutoOpen()
и AutoClose()
выполнить когда вы открываете / закрываете add in. Так что вам просто нужно это:
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 master@foo.com for more information."
END FUNCTION
возврат каретки улучшает читаемость с помощью wordwrap on. 2 птиц с одним камнем, теперь функция имеет некоторую документацию.
к сожалению, нет возможности добавлять подсказки для Аргументов UDF.
Чтобы расширить ответ Remou, вы можете найти более полный, но более сложный подход к описаниям мастера функций по адресу
http://www.jkp-ads.com/Articles/RegisterUDF00.asp
много танцев вокруг ответа. Вы можете добавить контекстную справку UDF, но вам нужно экспортировать модуль и отредактировать содержимое в текстовом редакторе, а затем повторно импортировать его в VBA. Вот пример из чипа Пирсона:Добавление Атрибутов Код
метод@will является лучшим. Просто добавьте несколько строк о деталях для людей, которые не использовали ExcelDNA раньше, как я.
Скачать Excel-ДНК 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 открывается несколько раз подряд, спонтанно при работе в несвязанных частях книги. Излишне говорить, что это очень раздражает. Иногда это продолжается, пока я не получаю круговое предупреждение. Иди разберись. Если UDF может изменить формулу ячейки, I сделал бы это, чтобы заткнуться.
Я не знаю, почему Excel чувствует необходимость пересчитывать формулу снова и снова; ни автономный _Help, ни полная версия (в режиме справки) не имеют прецедентов или зависимых. Нет приложение.Летучий заявление в любом месте. Конечно, функция возвращает значение вызывающей ячейке. Может быть, это запускает recalc? Но это то, что делают UDFs. Я не думаю, что вы можете не возврат a значение.
Так как вы не можете изменить рабочий лист формула из UDF я попытался вернуть определенную строку --a стоимостью --к вызывающей ячейке (единственной, которую вы можете изменить значение из UDF), полагая, что я проверю значение ячейки с помощью приложение.абонент в следующем цикле найдите мою строку и знайте, что не нужно повторно отображать сообщение справки. В то время это казалось хорошей идеей-не сработало. Может быть, я сделал что-то глупое в мой сплю государства. Мне все еще нравится эта идея. Я обновлю это, когда (если) я исправлю проблему. Моим быстрым решением было добавить строку в поле справки:"обратиться за помощью только в чрезвычайной ситуации. Удалите оскорбительную формулу, чтобы положить конец страданиям.
тем временем я попробовал приложение.Подход макроопций. Довольно просто, и выглядит профессионально. Нужно решить только одну проблему. Я опубликую отдельный ответ на этот подход позже.