我有一个可以从电子表格单元格中调用的自定义函数,我想在某些情况下不返回任何内容。换句话说,我希望将具有我的函数的单元格视为一个空单元格(除非该函数返回一个值)。
我能做到的最接近的是返回一个空字符串""
。不幸的是,COUNTA
或COUNTBLANK
不会将长度为零的字符串视为空,并且会破坏数学公式(例如1 + "" = #VALUE
)。
我尝试返回的大部分内容都会导致返回0,但用户会对此有不同的解释。
我该怎么办?
到目前为止尝试过:
Returns 0:
result = null
result = VbEmpty
result = Range("SomeCellKnownToBeEmpty")
Returns error:
result = Nothing
答案:我现在有理由相信这是不可能的,而且可以做的最好的事情就是解决它。
解决方案:
"-blank-"
并使用VBA宏删除"-blank-"
的任何单元格的内容。一种奇怪的方法,但符合我的需要。我这样做是准备我的出版工作簿的一个步骤。""
视为空白。答案 0 :(得分:5)
你遇到的麻烦是UDF 总是提供一个值,所以如果你有一个带有公式的单元格,它就不能是空白或空的,这就是你想要的。
我认为你可能需要尝试处理其他公式中的零或空字符串,或者将更大的进程转换为完全VBA。
如需更多阅读,请参阅:http://excel.tips.net/T002814_Returning_a_Blank_Value.html
答案 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
仍会计算这些单元格。