在Excel 2007中,如何向用户定义的函数添加描述和参数提示?当我开始为内置函数键入函数调用时,Excel会显示说明和参数列表-工具提示。我想对定义的功能执行相同的操作。
不只是用于公式插入向导,还包括在公式框中,因此,如果我键入"=myFun("
,则会"("
在工具提示处弹出,就像对于"=average("
在VBA帮助中没有任何帮助,在MSDN上没有任何帮助,在我可以找到的任何Excel和VBA专用论坛中也没有任何帮助,因此,这显然是一个漫长的尝试。
在Excel 2007中,如何向用户定义的函数添加描述和参数提示?当我开始为内置函数键入函数调用时,Excel会显示说明和参数列表-工具提示。我想对定义的功能执行相同的操作。
不只是用于公式插入向导,还包括在公式框中,因此,如果我键入"=myFun("
,则会"("
在工具提示处弹出,就像对于"=average("
在VBA帮助中没有任何帮助,在MSDN上没有任何帮助,在我可以找到的任何Excel和VBA专用论坛中也没有任何帮助,因此,这显然是一个漫长的尝试。
Answers:
Stephen Bullen的Professional Excel Development介绍了如何注册UDF,该描述允许在Function Arguments对话框中显示说明:
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”符号:
我知道您已经接受了有关此问题的答案,但是现在有了一个解决方案,通过Excel-DNA插入或通过在您的内部注册一个智能感知服务器,您可以像其他Excel功能一样弹出一个智能感知样式完成框。自己添加。请参见此处。
现在,我更喜欢采用C#的方式-更加简单,因为在Excel-DNA内部,任何实现的类IExcelAddin
都由addin框架拾取,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;
}
使用ExcelDNA批注进行批注,智能感知服务器将获取参数名称和描述。
也有一些仅与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
回车时自动换行可提高可读性。2鸟一石,现在该功能已有部分文档。
您也可以使用此宏为参数和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
@will的方法是最好的。只需添加几行有关细节的行即可,因为像我之前没有使用过ExcelDNA的人们。
从https://github.com/Excel-DNA/IntelliSense/releases下载Excel-DNA IntelliSense
有两种版本,一种是64版本,请检查您的Excel版本。就我而言,我使用的是64版本。
打开Excel / Developer / Add-Ins / Browse,然后选择ExcelDna.IntelliSense64.xll。
插入一个新表,将名称更改为“ IntelliSense ”,添加功能描述,如https://github.com/Excel-DNA/IntelliSense/wiki/Getting-Started
那就享受吧!:)
不幸的是,无法为UDF参数添加工具提示。
要扩展Remou的答复,您可以在http://www.jkp-ads.com/Articles/RegisterUDF00.asp上找到功能向导描述的更完整但更复杂的方法
我尝试了@ScottK的方法,首先将其作为功能性UDF的附带功能,然后在遇到麻烦时作为独立的_Help后缀版本(请参见下文)。事后看来,后一种方法还是更好的方法-对于足够专心的用户来说,更明显的是可以看到工具提示,并且不会使功能代码混乱。
我想一想,如果一个不专心的用户在想起它的时候刚刚键入了函数名并关闭了括号,就会出现帮助并且他会继续前进。但是,将一堆文本转储到我无法格式化的单个单元中似乎不是一个好主意。相反,当函数在没有参数的单元格中输入时,即
= interpolateLinear()
or
= interpolateLinear_Help()
将打开一个带有帮助文本的msgBox。msgBox的字符数限制为〜1000个字符,也许是1024个字符。但是对于我过度欺骗的插值函数来说,这就足够了(几乎是8 ^ /)。如果不是,您可以随时打开用户表单并前往城镇。
消息框第一次打开时,看起来像成功。但是有两个问题。当然,首先,用户必须知道不带任何参数的函数(对于_Help后缀UDF为+1)。
的大问题是,在MSGBOX重新打开连续多次,而自发地在工作簿中的不相关的部分工作。不用说,这很烦人。有时,直到我收到循环参考警告为止。去搞清楚。如果UDF可以更改单元格公式,那么我会关闭它。
我不知道为什么Excel认为需要一遍又一遍地重新计算公式。_Help独立版本或完整版本(在帮助模式下)都没有先例或从属项。任何地方都没有application.volatile语句。当然,该函数将值返回到调用单元格。也许触发重新计算?但这就是UDF所做的。我认为您无法返回值。
由于您无法通过UDF修改工作表公式,因此我尝试将一个特定的字符串(一个值)返回给调用单元格(唯一可以更改UDF值的字符串),以确保我可以检查在下一个周期使用application.caller设置单元格值,找出我的字符串,并知道不要重新显示帮助消息。当时似乎是个好主意-没用。也许我在睡眠不足的状态下做了一些愚蠢的事情。我还是喜欢这个主意。如果解决问题,我将更新此信息。我的快速解决方案是在帮助框上添加一行:“仅在紧急情况下寻求帮助。删除有问题的公式以结束苦难。
同时,我尝试了Application.MacroOptions方法。非常简单,而且看起来很专业。解决一个问题。稍后,我将针对该方法发布单独的答案。