将 Excel UDF 放入 Worksheet 对象(而不是在模块中)

Posted

技术标签:

【中文标题】将 Excel UDF 放入 Worksheet 对象(而不是在模块中)【英文标题】:Putting an Excel UDF into the Worksheet object (as opposed to in a module) 【发布时间】:2014-09-19 09:45:40 【问题描述】:

我怀疑答案是“不可能”——但询问这个优秀的社区并没有什么坏处!

我有一个特定工作表独有的 Excel 2013 UDF(用户定义函数)。

目前,我在包含工作簿的“模块”中有这个 UDF。但我想做的是将 UDF 代码放在“工作表对象”中,以便它可用于该特定工作表。

我当然试过了,但它不可见,所以我自然得到一个#NAME?错误。我已经尝试在函数前面加上 Public(这无论如何都会破坏对象),但无济于事。

有谁知道一个特定的技巧吗?

提前致谢,尼克。

【问题讨论】:

不可能。 UDF必须在普通模块中。 谢谢...我试过之后也有同样的怀疑。如果您将此作为答案,我可以奖励您的答案!但无论如何,再次感谢。 我已将其添加为答案。 :) 【参考方案1】:

根据您的功能要求,您可以有一个仅在预期工作表上返回正确答案的子句。

假设您的函数将范围作为输入,即

Function CheckSheet(r As Range)
    If r.Parent.Name = "Intended Sheet Name" Then
        CheckSheet = "The correct value!"
    Else
        CheckSheet = CVErr(xlErrNA)
    EndIf
End Function

编辑:

如果它作为参数的范围在预期的工作表上,则以前的版本仍然可以在另一个工作表上使用。可以修改为:

Function CheckSheet()
    If Application.Caller.Parent.Name = "Intended Sheet Name" Then
        CheckSheet = "The correct value!"
    Else
        CheckSheet = CVErr(xlErrNA)
    EndIf
End Function

Application.Caller 返回包含函数的单元格。

【讨论】:

【参考方案2】:

这是不可能的。 UDF 必须位于普通模块中。 :)

【讨论】:

以上是关于将 Excel UDF 放入 Worksheet 对象(而不是在模块中)的主要内容,如果未能解决你的问题,请参考以下文章

python将数据输出到excel中

excel将一个工作表根据条件拆分成多个工作簿,运行后,跳出类worksheet的delete方法无效

C#Excel Interop - 在调用Worksheet.ExportAsFixedFormat时抑制“发布”对话框

如何将 Excel 数组公式传递给 VBA UDF?

为啥 MS Excel 在 Worksheet_Change Sub 过程中崩溃并关闭?

C#导出Excel时怎么设置单元格的格式为数值类型