8

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

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

我大多数不返回任何内容的尝试都会导致返回 0,但这会被用户解释得非常不同。

我该怎么办?

到目前为止尝试过:

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

Returns error:
    result = Nothing

答:我现在有理由确定这是不可能的,能做的最好的事情就是解决它。

解决选项:

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

5 回答 5

5

您遇到的问题是 UDF 将始终提供一个值,因此,如果您有一个包含公式的单元格,则它不能为您想要的空白或空。

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

更多阅读请参见:http ://excel.tips.net/T002814_Returning_a_Blank_Value.html

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

于 2013-06-05T01:15:32.733 回答
2

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

Function Blah() As Variant
    Blah = Null

End Function

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

不过,我个人建议不要这样做;这是非常不寻常的,可能会导致进一步的问题。

于 2013-06-05T00:51:45.963 回答
1

不是针对 COUNT... 函数,而是让 Excel 为图表/图形/绘图“举起笔”让 UDF 返回 CVErr(xlErrNull)。

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

于 2015-01-09T15:27:07.653 回答
0

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

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

x = myfunction(a,b)

它工作得很好。

于 2013-09-05T13:06:41.637 回答
0

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

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

在单元格中,它会显示为#VALUE!,这有利于通过电子表格中的公式进行传播(确保用户知道存在错误),而它不会被某些函数(如COUNT. 请注意,COUNTA仍然计算这些单元格。

于 2017-07-09T14:41:48.413 回答