当用户单击 Fx 按钮时,是不是有一种方法可以使 UDF 提供类似于本机 Excel 函数的描述?
Posted
技术标签:
【中文标题】当用户单击 Fx 按钮时,是不是有一种方法可以使 UDF 提供类似于本机 Excel 函数的描述?【英文标题】:Is there a way to make UDF that gives a description like the native Excel functions have when user clicks the Fx button?当用户单击 Fx 按钮时,是否有一种方法可以使 UDF 提供类似于本机 Excel 函数的描述? 【发布时间】:2013-02-06 14:40:15 【问题描述】:如果我在公式栏中键入 =vlookup(
(或任何其他本机 Excel 函数),然后单击公式左侧的小 Fx 按钮,我会得到一个包含所有可用参数的函数参数提示。在该提示中,函数参数下方是函数和每个参数的一两句话描述,当您将光标从每个参数的输入框中移动时。
当我输入我的 UDF 的名称并单击 Fx 时,我会看到一个输入框,用于输入我的所有参数,但仅此而已。有没有一种方法可以添加与原生 Excel 函数相同的有用类型的描述?
【问题讨论】:
谷歌搜索时在第一页上excel 2010 udf description
: jkp-ads.com/articles/RegisterUDF00.asp
【参考方案1】:
在单元格中输入=FormulaName(
,然后按Ctrl+Shift+A
,它将填写参数的引用名称
【讨论】:
从来不知道这个,总的来说很有用,+1 我也没有! +1。漂亮的自行车。 限制“SampleFunction”中参数名称的长度 = 254 - NumberOfArguments。例如,给定Function SampleFunction( Num1, Num2, Num3 )
,Len("Num1") + Len("Num2") + Len("Num3") + 3
必须 将在公式栏中显示完整的参数名称。如果您在公式栏中看到(..)
,则您已超出此限制。【参考方案2】:
我建议进一步研究 Application.MacroOptions 方法。该方法不仅允许您提供函数的描述,还允许您提供每个参数的描述。例如,如果您有一个名为“SampleFunction”的函数,它接受两个参数,您可以运行以下命令,它将很好地设置您在函数中使用 fx 按钮。:
Private Sub RegisterMyFunction()
Application.MacroOptions _
Macro:="SampleFunction", _
Description:="calculates a result based on provided inputs", _
Category:="My UDF Category", _
ArgumentDescriptions:=Array( _
"is the first argument. tell the user what it does", _
"is the second argument. tell the user what it does")
End Sub
【讨论】:
这是这样做的方法 限制“SampleFunction”中参数名称的长度 = 254 - NumberOfArguments。例如,给定Function SampleFunction( Num1, Num2, Num3 )
,Len("Num1") + Len("Num2") + Len("Num3") + 3
必须 将在公式栏中显示完整的参数名称。 “函数参数”对话框中的 ..
或公式栏中的 (..)
表示您已超出此限制。
请注意,ArgumentDescriptions 参数不适用于 2010 之前的版本。【参考方案3】:
是的,有一种隐藏的方法可以做到这一点:
在 VBA 中定义 UDF 后,转到 Visual Basic 编辑器中的对象浏览器 (F2)。在这里,在顶部下拉菜单中,选择VBAProject
。在下面的窗口中,导航到您的 UDF 并右键单击它 - 选择 Properties
:
在属性中,您可以提供描述。
如果您需要更多信息,例如如何将功能添加到某个类别查看此OzGrid article!
【讨论】:
你是天才!)+1 的诀窍 - 以备将来使用)(哦,天哪,我太丑了,仍然不知道 soooooooo mush ...... doh... ) 这看起来不错,但出于某种原因,每当我在描述中键入内容然后单击“确定”时,它不会保存我键入的内容。在我点击 OK 后,我可以立即返回属性,那里什么也没有了。有什么想法是什么原因造成的吗? 我尝试了不同的加载项,其中一些有效,有些无效。在某些情况下,我将公共功能切换为正常功能。这并不是说它是否公开重要,而是关于删除“公开”的某些事情可能使它起作用......非常奇怪。 我想我理解了这个问题:UDF 描述只在 Excel 运行时加载一次。这一点,如果你之前在 fx 窗口中查看过,Excel 将不会更改它,直到你重新启动它! @PeterAlbert - 感谢您解决这个问题...看来我没有足够的耐心,并希望更改发生 NOW :)【参考方案4】:编辑
我刚刚注意到您在 VBA 中创建 UDF,因此我的回复可能不适用于您的情况。
查看 Excel SDK 中名为 Generic 的示例项目之一。
这是一个最基本的骨架
在头包含语句之后,您会注意到一个二维数组的声明,其中行表示 XLL 中的 UDF 数量,列用于描述特定 UDF
第一列用于 UDF 的名称,后跟一个字符串,其中包含表示 UDF 中每个参数的数据类型的字母。
这些列可用于将每个参数的描述文本放入 UDF 中
列数由参数数量最多的UDF决定,参数较少的UDF使用空字符串作为超出此类UDF中参数数量的值
但是这些描述会显示在你点击Fx图标时弹出的对话框中
【讨论】:
【参考方案5】:像我在下面创建的那样创建函数:函数 CompanyNames:
Function CompanyNames(CompanyCode As Integer, Data As Range) As String
CompanyNames = WorksheetFunction.VLookup(CompanyCode, Data, 2, False)
End Function
运行下面的代码一次,你会得到函数中的参数描述
Sub DescribeFunction()
Dim FuncName As String
Dim FuncDesc As String
Dim Category As String
Dim ArgDesc(1 To 2) As String
FuncName = "CompanyNames"
FuncDesc = "Returns the Company Name"
ArgDesc(1) = "Provide the Company Code"
ArgDesc(2) = "Select Range to lookup"
Application.MacroOptions _
Macro:=FuncName, _
Description:=FuncDesc, _
Category:=Category, _
ArgumentDescriptions:=ArgDesc
End Sub
【讨论】:
虽然这是一个很好的答案,但尚不清楚它对肯德尔的 4 年旧答案增加了什么,该答案也使用了Application.MacroOptions
以上是关于当用户单击 Fx 按钮时,是不是有一种方法可以使 UDF 提供类似于本机 Excel 函数的描述?的主要内容,如果未能解决你的问题,请参考以下文章