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

时间:2014-09-19 09:45:41

标签: excel vba excel-vba excel-2013 excel-udf

我怀疑答案是"不可能" - 但要求这个优秀的社区没有害处!

我有一个Excel 2013 UDF(用户定义函数),它对某个工作表是唯一的。

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

我当然试过了,但它不可见,所以我自然会得到一个#NAME?错误。我已经尝试过使用公共功能(无论如何都会打败对象),但无济于事。

有没有人知道特定的伎俩?

先谢谢,Nic。

2 个答案:

答案 0 :(得分:2)

这是不可能的。 UDF 具有在正常模块中。 :)

答案 1 :(得分:2)

根据您的功能要求,您可以使用只在预期工作表上返回正确答案的子句。

让我们说你的函数需要一个范围作为输入,即

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返回包含该函数的单元格。