当用户单击 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 函数的描述?的主要内容,如果未能解决你的问题,请参考以下文章

iPhone:当用户单击主页按钮时,是不是可以关闭应用程序而不是在后台运行?

单击返回按钮而不是 $_POST 值时读取会话

当用户单击“提交”按钮时将信息捕获到日志文件

除非用户单击特定按钮,否则如何向用户显示警报框

应用程序关闭时用户单击通知时如何获取用户信息?

如何在单击按钮时打印 HTML 内容,而不是页面? [复制]