我正在处理可以包含数字和文本(或空单元格)的小范围(只有一列)。 worksheetfunction.average
的描述说“参数可以是数字或名称,数组或包含数字的引用”。和“如果数组或引用参数包含文本,逻辑值或空单元格,则忽略这些值。”它也说“不计算空单元格,但零值是。”
然而,
With Sh
SlpStdBlkCorr_Sh.Range("T2") = WorksheetFunction.Average(.Range(RawPb208Range))
End with
引发“无法获取工作表功能类的平均属性”错误。
这行代码重复使用,因此所有变量都已完美设置,只有当范围有空单元格或带有文本的单元格时,才会出现此错误。
.average
不应忽略具有非数字内容的这些单元格吗?
我已经通过Paul Aford尝试了解决方案,但问题在于,当我计算某些东西时,我可以创建一些怪物,只需将变量等于0(SlpStdBlkCorr_Sh.Range("T2")=0
)或1({{1} })。
想法?
答案 0 :(得分:1)
在我的测试中,只有当范围包含仅非数字值和/或空白单元格时才会出错。这与工作表中AVERAGE
函数的行为相匹配。如果您使用的公式包含=AVERAGE(A1:A10)
,并且这些单元格都是非数字或空白的,则会返回" #DIV / 0"。
这是有道理的,因为没有数字,没有什么可以分开,所以分母是零。
这是您可以用来测试的工作表选择更改事件:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Count function returns cells with numeric values
If WorksheetFunction.Count(Selection) > 0 Then
Debug.Print WorksheetFunction.Average(Selection)
Else
Debug.Print "Nothing to Average"
End If
End Sub
请注意,如果范围中的一个或多个单元格具有返回错误的公式,例如#N/A
,则会看到相同的错误消息。