【发布时间】:2015-12-17 19:03:19
【问题描述】:
我试图区分无输入或“Null”与输入包括数字0 的内容。
我编写了一个名为“ZeroToAppear”的公共函数,通过将数字 0 作为字符串返回,与索引匹配函数一起使用时效果很好,但它不能与财务预算中常见的 sum 函数一起使用:
Public Function ZeroToAppear(x As Variant) As Variant
If IsNull(x) Then
ZeroToAppear = Null
ElseIf x = 0 Then
ZeroToAppear = CStr(x)
Else
ZeroToAppear = x
End If
End Function
我已经合理化了问题在于 excel 自动将 null 视为 0 以避免 ArgumentNullExceptions。
所以我正在尝试编写另一个宏,该宏在获取可以区分无输入和 0 或更大输入的范围之和时会起作用,因为在 excel 中没有输入的单元格的总和自动等于零,我想要它报告 null 甚至更好地报告 false 以便根本不做总和。
我已经开始编写一个函数来测试我将求和的范围内的每个单元格,以查看它是否为空、错误或其他什么。如果它为 null 或错误,我希望它将 null 报告到测试数组中。如果还有其他输入,我希望它报告输入到测试数组中的任何内容。然后我想确定整个测试数组是否报告 null 以使我的原始函数为 false 并且不在我正在测试的范围内运行总和,但如果有其他值,那么函数应该返回 true 并且可以运行总和。
Public Function NullOrErrorFalse() As Variant
Dim arrOutput() As Variant
ReDim arrOutput(n) As Variant
n = 0
For Each cell In NullOrErrorFalse()
If IsNull(cell) Then
arrOutput(n) = Null
ElseIf IsError(cell) Then
arrOutput(n) = Null
Else
arrOutput(n) = cell.Value
End If
n = n + 1
Next cell
Sub test(arrOutput())
If arrOutput() = Null Then
NullOrErrorFalse = False
Else
NullOrErrorFalse = True
End If
End Sub
End Function
此时我的函数将无法正确编译,并且对于 VBA 和一般编程来说是新手,我不确定我的问题是误用还是语法或操作顺序。
【问题讨论】:
-
你不能在这样的函数中嵌套 Sub。