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



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



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



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

776   9  

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 " в Формуле бар:

enter image description here

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

начните вводить 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 подберет имена аргументов и описания.

enter image description here enter image description here

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

затем наслаждайтесь! :)

enter image description here

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

    Ничего не найдено.