使一个VBA自定义函数什么都不返回 – 不是0,不是空白string,但没有

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

我能做的最接近的是返回一个空string"" 。 不幸的是,具有零长度string的单元格不被COUNTACOUNTBLANK视为空,并且打破math公式(例如1 + "" = #VALUE )。

我的大多数尝试返回没有返回0,但这将被用户很不同的解释。

我该怎么办?

迄今试过:

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

答:我现在确信这是不可能的,最好的办法就是解决这个问题。

解决选项:

  • 返回一个string"-blank-"并让VBAmacros用"-blank-"删除任何单元格的内容。 一个奇怪的方法,但符合我的需求。 我正在做这个作为准备我的出版工作簿的步骤之一。
  • 返回空string,并显式获取表中的其他公式,将其视为空白。
  • 返回并显示0:返回0并使用自定义格式来隐藏0。

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

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

欲了解更多信息,请参阅: http : //excel.tips.net/T002814_Returning_a_Blank_Value.html

编辑:可能的重复: 在Excel中从公式返回空单元格

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

 Function Blah() As Variant Blah = Null End Function Sub Test() Range("A1").Value = Blah() End Sub 

我个人build议不要这样做, 这是非常不寻常的,可能会导致更多的问题。

不适用于COUNT …函数,但要让Excel为图表/graphics/图表“提起笔”,UDF将返回CVErr(xlErrNull)。

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

我有同样的问题。 所以我做的是创build一个虚拟variables,并将其设置为等于该function..

函数我拿了一些variables,然后显示在消息框中,我不想返回任何值,所以我这样做:

x = myfunction(a,b)

它工作完美。

你应该返回一个错误,像这样:

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

在单元格中,它将显示为#VALUE! ,它具有通过电子表格中的公式传播的好处(确保用户知道有错误),而不会被像COUNT这样的函数计算在内。 请注意, COUNTA仍然计数这些单元格。