使自定义函数返回任何内容 - 不是0,不是空字符串,而是什么都没有

时间:2013-06-05 00:43:44

标签: excel vba excel-vba excel-2007 user-defined-functions

我有一个可以从电子表格单元格中调用的自定义函数,我想在某些情况下不返回任何内容。换句话说,我希望将具有我的函数的单元格视为一个空单元格(除非该函数返回一个值)。

我能做到的最接近的是返回一个空字符串""。不幸的是,COUNTACOUNTBLANK不会将长度为零的字符串视为空,并且会破坏数学公式(例如1 + "" = #VALUE)。

我尝试返回的大部分内容都会导致返回0,但用户会对此有不同的解释。

我该怎么办?

到目前为止尝试过:

Returns 0:
    result = null
    result = VbEmpty
    result = Range("SomeCellKnownToBeEmpty")

Returns error:
    result = Nothing

答案:我现在有理由相信这是不可能的,而且可以做的最好的事情就是解决它。

解决方案:

  • 返回字符串"-blank-"并使用VBA宏删除"-blank-"的任何单元格的内容。一种奇怪的方法,但符合我的需要。我这样做是准备我的出版工作簿的一个步骤。
  • 返回空字符串并明确获取工作表中的其他公式,以将""视为空白。
  • 返回并显示0:返回0并使用自定义格式隐藏0。

5 个答案:

答案 0 :(得分:5)

你遇到的麻烦是UDF 总是提供一个值,所以如果你有一个带有公式的单元格,它就不能是空白或空的,这就是你想要的。

我认为你可能需要尝试处理其他公式中的零或空字符串,或者将更大的进程转换为完全VBA。

如需更多阅读,请参阅:http://excel.tips.net/T002814_Returning_a_Blank_Value.html

修改:可能重复:Return empty cell from formula in Excel

答案 1 :(得分:2)

我能得到的最接近的是将返回值设置为Variant并返回null:

Function Blah() As Variant
    Blah = Null

End Function

Sub Test()
    Range("A1").Value = Blah()
End Sub

我个人会提出反对意见;这是非常不寻常的,可能会导致进一步的问题。

答案 2 :(得分:1)

不适用于COUNT ...功能,但要使用Excel"抬起笔"对于图表/图表/图表,UDF返回CVErr(xlErrNull)。

这是相当奇怪的,因为返回 NA()单元格公式将导致Excel“提起笔”#34 ;;但是返回CVErr(xlErrNA)的UDF不会做同样的事情。幸运的是,CVErr(xlErrNull)可以工作。

答案 3 :(得分:0)

我遇到了同样的问题。所以我所做的是创建一个虚拟变量并将其设置为等于函数..

我已经使用了一些变量,然后在消息框中显示它们,我不想返回任何值,所以我这样做了:

x = myfunction(a,b)

效果很好。

答案 4 :(得分:0)

您应该返回错误,如下所示:

Function retError()
    ' This function returns an error. 
    retError = CVErr(vbValue)
End Function

在一个单元格中,它会显示为#VALUE!,它有利于通过电子表格中的公式进行传播(确保用户知道那里有错误),而它不会被计算在内通过COUNT等功能。请注意,COUNTA仍会计算这些单元格。